VERSION 5.00 Begin VB.Form frmGameScreen AutoRedraw = -1 'True BorderStyle = 1 'Fixed Single Caption = " 4000 A.D." ClientHeight = 6795 ClientLeft = 60 ClientTop = 345 ClientWidth = 9480 Icon = "FRMGAMES.frx":0000 KeyPreview = -1 'True LinkTopic = "Form1" PaletteMode = 1 'UseZOrder ScaleHeight = 6795 ScaleWidth = 9480 WindowState = 2 'Maximized Begin VB.Timer tmrUpdateMessageBox Enabled = 0 'False Interval = 3000 Left = 1155 Top = 390 End Begin VB.PictureBox picNuclear Height = 315 Left = 1560 Picture = "FRMGAMES.frx":08CA ScaleHeight = 255 ScaleWidth = 255 TabIndex = 135 Top = 1035 Visible = 0 'False Width = 315 End Begin VB.PictureBox picPlanet5 Height = 285 Left = 465 Picture = "FRMGAMES.frx":09C4 ScaleHeight = 225 ScaleWidth = 195 TabIndex = 134 Top = 480 Visible = 0 'False Width = 255 End Begin VB.PictureBox picPlanet4 Height = 285 Left = 45 Picture = "FRMGAMES.frx":0EE6 ScaleHeight = 225 ScaleWidth = 195 TabIndex = 133 Top = 465 Visible = 0 'False Width = 255 End Begin VB.PictureBox picPlanet3 Height = 285 Left = 735 Picture = "FRMGAMES.frx":1418 ScaleHeight = 225 ScaleWidth = 195 TabIndex = 132 Top = 75 Visible = 0 'False Width = 255 End Begin VB.PictureBox picPlanet2 Height = 285 Left = 405 Picture = "FRMGAMES.frx":194A ScaleHeight = 225 ScaleWidth = 195 TabIndex = 131 Top = 60 Visible = 0 'False Width = 255 End Begin VB.PictureBox picPlanet1 Height = 270 Left = 45 Picture = "FRMGAMES.frx":1E7C ScaleHeight = 210 ScaleWidth = 165 TabIndex = 130 Top = 90 Visible = 0 'False Width = 225 End Begin VB.PictureBox picTiny Height = 510 Left = -45 Picture = "FRMGAMES.frx":23AE ScaleHeight = 450 ScaleWidth = 420 TabIndex = 129 Top = 1635 Visible = 0 'False Width = 480 End Begin VB.Frame fraLanding Caption = "Attack/Land Ships" Enabled = 0 'False BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 945 Left = 7635 TabIndex = 113 Top = 5910 Width = 1860 Begin VB.CommandButton cmdLandShip2 Caption = "Ship 2" Enabled = 0 'False Height = 300 Left = 180 TabIndex = 115 Top = 540 Width = 1500 End Begin VB.CommandButton cmdLandShip1 Caption = "Ship 1" Enabled = 0 'False Height = 300 Left = 180 TabIndex = 114 Top = 240 Width = 1500 End End Begin VB.PictureBox picTemp BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 525 Left = 30 Picture = "FRMGAMES.frx":2C78 ScaleHeight = 465 ScaleWidth = 495 TabIndex = 112 Top = 990 Visible = 0 'False Width = 555 End Begin VB.TextBox txtPlayerName BackColor = &H00000000& BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 330 Left = 6105 TabIndex = 84 Text = "Player 1" Top = 6480 Width = 1485 End Begin VB.TextBox txtTurnNumber BackColor = &H00000000& BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 330 Left = 5190 TabIndex = 55 Text = "Turn " Top = 6480 Width = 885 End Begin VB.CommandButton cmdEndTurn Caption = "&Save Turn" Height = 330 Left = 180 TabIndex = 45 Top = 5490 Width = 1200 End Begin VB.Frame fraUpgrade Caption = "Resource Mgmt" Enabled = 0 'False BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 5820 Left = 7620 TabIndex = 44 Top = 30 Width = 1875 Begin VB.CommandButton cmdRepairIndustry Caption = "Repair Industry" Enabled = 0 'False Height = 300 Left = 180 TabIndex = 138 Top = 4830 Width = 1500 End Begin VB.CommandButton cmdCleanup Caption = "Detoxify Planet" Enabled = 0 'False Height = 300 Left = 180 TabIndex = 127 Top = 5130 Width = 1500 End Begin VB.CommandButton cmdRegenerate Caption = "Regenerate Planet" Enabled = 0 'False Height = 300 Left = 180 TabIndex = 126 Top = 5430 Width = 1500 End Begin VB.PictureBox picUpgrade BackColor = &H00C0C0C0& Height = 660 Index = 7 Left = 1230 Picture = "FRMGAMES.frx":3542 ScaleHeight = 600 ScaleMode = 0 'User ScaleWidth = 495 TabIndex = 125 Top = 1890 Width = 555 End Begin VB.PictureBox picUpgrade BackColor = &H00C0C0C0& Height = 645 Index = 6 Left = 1260 Picture = "FRMGAMES.frx":3FD8 ScaleHeight = 585 ScaleMode = 0 'User ScaleWidth = 465 TabIndex = 124 Top = 1215 Width = 525 End Begin VB.CommandButton cmdScan Caption = "Scanner" Enabled = 0 'False Height = 300 Left = 180 TabIndex = 123 Top = 4530 Width = 1500 End Begin VB.CommandButton cmdPlanetName Height = 270 Left = 105 TabIndex = 120 Top = 210 Width = 1665 End Begin VB.Frame fraTactical BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 825 Left = 60 TabIndex = 110 Top = 3660 Width = 1755 Begin VB.CommandButton cmdLaunchBioRocket Caption = "BioHazard Rocket" Enabled = 0 'False Height = 300 Left = 120 TabIndex = 128 Top = 450 Width = 1500 End Begin VB.CommandButton cmdLaunch Caption = "&Launch Ship" Enabled = 0 'False Height = 300 Left = 120 TabIndex = 111 Top = 150 Width = 1500 End End Begin VB.CommandButton cmdOK Caption = "&OK" Enabled = 0 'False Height = 270 Left = 450 TabIndex = 90 Top = 3375 Width = 1050 End Begin VB.TextBox txtTotal BackColor = &H00000000& BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 285 Left = 945 MultiLine = -1 'True TabIndex = 89 Top = 3045 Width = 555 End Begin VB.HScrollBar hsbQuantity Enabled = 0 'False Height = 240 LargeChange = 2 Left = 90 Max = 50 TabIndex = 86 Top = 2760 Width = 1425 End Begin VB.PictureBox picUpgrade BackColor = &H00000000& Height = 660 Index = 5 Left = 105 Picture = "FRMGAMES.frx":493A ScaleHeight = 600 ScaleWidth = 510 TabIndex = 53 Top = 1890 Width = 570 End Begin VB.PictureBox picUpgrade BackColor = &H00808080& Height = 645 Index = 4 Left = 690 Picture = "FRMGAMES.frx":4C44 ScaleHeight = 585 ScaleWidth = 480 TabIndex = 52 Top = 1215 Width = 540 End Begin VB.PictureBox picUpgrade Height = 645 Index = 3 Left = 105 Picture = "FRMGAMES.frx":5D52 ScaleHeight = 585 ScaleWidth = 495 TabIndex = 51 Top = 1215 Width = 555 End Begin VB.PictureBox picUpgrade BackColor = &H00800080& Height = 675 Index = 2 Left = 1260 Picture = "FRMGAMES.frx":67D4 ScaleHeight = 615 ScaleWidth = 480 TabIndex = 50 Top = 525 Width = 540 End Begin VB.PictureBox picUpgrade Height = 675 Index = 1 Left = 660 Picture = "FRMGAMES.frx":78E2 ScaleHeight = 615 ScaleWidth = 525 TabIndex = 49 Top = 525 Width = 585 End Begin VB.PictureBox picUpgrade Height = 675 Index = 0 Left = 105 Picture = "FRMGAMES.frx":8330 ScaleHeight = 615 ScaleWidth = 480 TabIndex = 48 Top = 525 Width = 540 End Begin VB.Label lblTotal Caption = "Cost:" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 225 Left = 420 TabIndex = 88 Top = 3075 Width = 480 End Begin VB.Label lblQuantity BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 225 Left = 1530 TabIndex = 87 Top = 2760 Width = 300 End Begin VB.Label lblItemName Alignment = 2 'Center Height = 195 Left = 105 TabIndex = 85 Top = 2580 Width = 1590 End End Begin VB.Frame fraEnemyWarpPath Caption = "Player 2 Warp Path" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 975 Left = 1515 TabIndex = 23 Top = 30 Width = 6015 Begin VB.CommandButton cmdPreviewEnemy2 Caption = "Ship 2" Height = 255 Left = 75 TabIndex = 117 Top = 585 Width = 775 End Begin VB.CommandButton cmdPreviewEnemy1 Caption = "Ship 1" Height = 255 Left = 75 TabIndex = 116 Top = 255 Width = 775 End Begin VB.PictureBox picEnemyPath AutoRedraw = -1 'True BackColor = &H000000C0& ForeColor = &H000000FF& Height = 675 Index = 7 Left = 5295 ScaleHeight = 615 ScaleWidth = 570 TabIndex = 98 Top = 195 Width = 625 End Begin VB.PictureBox picEnemyPath AutoRedraw = -1 'True BackColor = &H000040C0& ForeColor = &H000000FF& Height = 675 Index = 6 Left = 4665 ScaleHeight = 615 ScaleWidth = 570 TabIndex = 97 Top = 195 Width = 625 End Begin VB.PictureBox picEnemyPath AutoRedraw = -1 'True BackColor = &H00000000& ForeColor = &H000000FF& Height = 675 Index = 5 Left = 4035 ScaleHeight = 615 ScaleWidth = 570 TabIndex = 96 Top = 195 Width = 625 End Begin VB.PictureBox picEnemyPath AutoRedraw = -1 'True BackColor = &H00000000& ForeColor = &H000000FF& Height = 675 Index = 4 Left = 3405 ScaleHeight = 615 ScaleWidth = 570 TabIndex = 95 Top = 195 Width = 625 End Begin VB.PictureBox picEnemyPath AutoRedraw = -1 'True BackColor = &H00000000& ForeColor = &H000000FF& Height = 675 Index = 3 Left = 2775 ScaleHeight = 615 ScaleWidth = 570 TabIndex = 94 Top = 195 Width = 625 End Begin VB.PictureBox picEnemyPath AutoRedraw = -1 'True BackColor = &H00000000& ForeColor = &H000000FF& Height = 675 Index = 2 Left = 2140 ScaleHeight = 615 ScaleWidth = 570 TabIndex = 93 Top = 195 Width = 625 End Begin VB.PictureBox picEnemyPath AutoRedraw = -1 'True BackColor = &H00000000& ForeColor = &H000000FF& Height = 675 Index = 1 Left = 1515 ScaleHeight = 615 ScaleWidth = 570 TabIndex = 92 Top = 195 Width = 625 End Begin VB.PictureBox picEnemyPath AutoRedraw = -1 'True BackColor = &H00400000& ForeColor = &H000000FF& Height = 675 Index = 0 Left = 885 ScaleHeight = 615 ScaleWidth = 570 TabIndex = 91 Top = 195 Width = 625 End End Begin VB.Frame fraWarpPath Caption = "Player 1 Warp Path" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 975 Left = 1545 TabIndex = 12 Top = 5445 Width = 6045 Begin VB.CommandButton cmdPreviewShip2 Caption = "Ship 2" Height = 255 Left = 75 TabIndex = 119 Top = 585 Width = 775 End Begin VB.CommandButton cmdPreviewShip1 Caption = "Ship 1" Height = 255 Left = 75 TabIndex = 118 Top = 255 Width = 775 End Begin VB.PictureBox picPlayerPath AutoRedraw = -1 'True BackColor = &H000000C0& BeginProperty Font Name = "MS Serif" Size = 6.75 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FFFF& Height = 675 Index = 7 Left = 5310 ScaleHeight = 615 ScaleWidth = 570 TabIndex = 106 Top = 195 Width = 625 End Begin VB.PictureBox picPlayerPath AutoRedraw = -1 'True BackColor = &H000040C0& BeginProperty Font Name = "MS Serif" Size = 6.75 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FFFF& Height = 675 Index = 6 Left = 4680 ScaleHeight = 615 ScaleWidth = 570 TabIndex = 105 Top = 195 Width = 625 End Begin VB.PictureBox picPlayerPath AutoRedraw = -1 'True BackColor = &H00000000& BeginProperty Font Name = "MS Serif" Size = 6.75 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FFFF& Height = 675 Index = 5 Left = 4050 ScaleHeight = 615 ScaleWidth = 570 TabIndex = 104 Top = 195 Width = 625 End Begin VB.PictureBox picPlayerPath AutoRedraw = -1 'True BackColor = &H00000000& BeginProperty Font Name = "MS Serif" Size = 6.75 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FFFF& Height = 675 Index = 4 Left = 3420 ScaleHeight = 615 ScaleWidth = 570 TabIndex = 103 Top = 195 Width = 625 End Begin VB.PictureBox picPlayerPath AutoRedraw = -1 'True BackColor = &H00000000& BeginProperty Font Name = "MS Serif" Size = 6.75 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FFFF& Height = 675 Index = 3 Left = 2790 ScaleHeight = 615 ScaleWidth = 570 TabIndex = 102 Top = 195 Width = 625 End Begin VB.PictureBox picPlayerPath AutoRedraw = -1 'True BackColor = &H00000000& BeginProperty Font Name = "MS Serif" Size = 6.75 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FFFF& Height = 675 Index = 2 Left = 2160 ScaleHeight = 615 ScaleWidth = 570 TabIndex = 101 Top = 195 Width = 625 End Begin VB.PictureBox picPlayerPath AutoRedraw = -1 'True BackColor = &H00000000& BeginProperty Font Name = "MS Serif" Size = 6.75 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FFFF& Height = 675 Index = 1 Left = 1530 ScaleHeight = 615 ScaleWidth = 570 TabIndex = 100 Top = 195 Width = 625 End Begin VB.PictureBox picPlayerPath AutoRedraw = -1 'True BackColor = &H00400000& BeginProperty Font Name = "MS Serif" Size = 6.75 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FFFF& Height = 675 Index = 0 Left = 900 ScaleHeight = 615 ScaleWidth = 570 TabIndex = 99 Top = 195 Width = 625 End End Begin VB.Frame fraPlayerStats Caption = "Player Stats" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 2595 Left = 60 TabIndex = 5 Top = 2430 Width = 1440 Begin VB.TextBox txtProduction BackColor = &H00000000& BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 300 Left = 405 MultiLine = -1 'True TabIndex = 137 Top = 2160 Width = 660 End Begin VB.TextBox txtNumAssaultTroops BackColor = &H00000000& BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 285 Left = 675 MultiLine = -1 'True TabIndex = 109 Top = 1020 Width = 660 End Begin VB.TextBox txtNumResources BackColor = &H00000000& BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 285 Left = 405 MultiLine = -1 'True TabIndex = 11 Top = 1590 Width = 660 End Begin VB.TextBox txtNumTroops BackColor = &H00000000& BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 285 Left = 675 MultiLine = -1 'True TabIndex = 10 Top = 645 Width = 660 End Begin VB.TextBox txtNumPlanets BackColor = &H00000000& BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 285 Left = 675 MultiLine = -1 'True TabIndex = 9 Top = 270 Width = 660 End Begin VB.Label Label1 Caption = "Resources/Turn:" Height = 210 Left = 105 TabIndex = 136 Top = 1920 Width = 1290 End Begin VB.Label lblAssaultTroops Caption = "Mechs:" Height = 225 Left = 90 TabIndex = 108 Top = 1050 Width = 570 End Begin VB.Label lblResources Caption = "Total Resources:" Height = 210 Left = 90 TabIndex = 8 Top = 1365 Width = 1260 End Begin VB.Label lblNumTroops Caption = "Troops:" Height = 225 Left = 75 TabIndex = 7 Top = 675 Width = 570 End Begin VB.Label lblnumplanets Caption = "Planets:" Height = 210 Left = 60 TabIndex = 6 Top = 300 Width = 615 End End Begin VB.CommandButton cmdAbort Caption = "&Abort" Height = 330 Left = 180 TabIndex = 4 Top = 5820 Width = 1200 End Begin VB.Timer tmrRandomSounds Interval = 35000 Left = 495 Top = 6180 End Begin VB.Frame fraMessages Caption = "Messages" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 1395 Left = 45 TabIndex = 2 Top = 1005 Width = 1455 Begin VB.CommandButton cmdViewSend Caption = "&View/Send" Height = 300 Left = 60 TabIndex = 54 Top = 975 Width = 1275 End Begin VB.TextBox txtMessages BackColor = &H00000000& BeginProperty Font Name = "Arial" Size = 8.25 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 645 Left = 45 MultiLine = -1 'True TabIndex = 3 Text = "FRMGAMES.frx":8D7E Top = 240 Width = 1350 End End Begin VB.TextBox txtStatus BackColor = &H00000000& BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H0000FF00& Height = 330 Left = 90 Locked = -1 'True TabIndex = 1 Top = 6480 Width = 5070 End Begin VB.PictureBox picGalaxy AutoRedraw = -1 'True AutoSize = -1 'True BackColor = &H00000000& BeginProperty Font Name = "MS Serif" Size = 6 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00FFFFFF& Height = 4095 Left = 1800 ScaleHeight = 4035 ScaleWidth = 5670 TabIndex = 0 Top = 1230 Width = 5730 Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 49 Left = 5220 Picture = "FRMGAMES.frx":8D99 ScaleHeight = 225 ScaleWidth = 225 TabIndex = 83 Top = 3510 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 48 Left = 4770 Picture = "FRMGAMES.frx":92CB ScaleHeight = 225 ScaleWidth = 225 TabIndex = 82 Top = 3120 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 210 Index = 47 Left = 4320 Picture = "FRMGAMES.frx":97FD ScaleHeight = 210 ScaleWidth = 210 TabIndex = 81 Top = 3660 Width = 210 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 46 Left = 3540 Picture = "FRMGAMES.frx":9D1F ScaleHeight = 225 ScaleWidth = 225 TabIndex = 80 Top = 3360 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 45 Left = 2820 Picture = "FRMGAMES.frx":A251 ScaleHeight = 225 ScaleWidth = 225 TabIndex = 79 Top = 3300 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 44 Left = 2160 Picture = "FRMGAMES.frx":A783 ScaleHeight = 225 ScaleWidth = 225 TabIndex = 78 Top = 3660 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 43 Left = 1620 Picture = "FRMGAMES.frx":ACB5 ScaleHeight = 225 ScaleWidth = 225 TabIndex = 77 Top = 3285 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 210 Index = 42 Left = 960 Picture = "FRMGAMES.frx":B1E7 ScaleHeight = 210 ScaleWidth = 210 TabIndex = 76 Top = 3660 Width = 210 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 41 Left = 600 Picture = "FRMGAMES.frx":B709 ScaleHeight = 225 ScaleWidth = 225 TabIndex = 75 Top = 3120 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 40 Left = 225 Picture = "FRMGAMES.frx":BC3B ScaleHeight = 225 ScaleWidth = 225 TabIndex = 74 Top = 3555 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 39 Left = 5340 Picture = "FRMGAMES.frx":C16D ScaleHeight = 225 ScaleWidth = 225 TabIndex = 73 Top = 2820 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 38 Left = 4920 Picture = "FRMGAMES.frx":C69F ScaleHeight = 225 ScaleWidth = 225 TabIndex = 72 Top = 2400 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 37 Left = 4230 Picture = "FRMGAMES.frx":CBD1 ScaleHeight = 225 ScaleWidth = 225 TabIndex = 71 Top = 2820 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 210 Index = 36 Left = 3600 Picture = "FRMGAMES.frx":D103 ScaleHeight = 210 ScaleWidth = 210 TabIndex = 70 Top = 2580 Width = 210 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 35 Left = 2820 Picture = "FRMGAMES.frx":D625 ScaleHeight = 225 ScaleWidth = 225 TabIndex = 69 Top = 2700 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 34 Left = 2100 Picture = "FRMGAMES.frx":DB57 ScaleHeight = 225 ScaleWidth = 225 TabIndex = 68 Top = 2760 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 33 Left = 1620 Picture = "FRMGAMES.frx":E089 ScaleHeight = 225 ScaleWidth = 225 TabIndex = 67 Top = 2355 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 32 Left = 1080 Picture = "FRMGAMES.frx":E5BB ScaleHeight = 225 ScaleWidth = 225 TabIndex = 66 Top = 2880 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 31 Left = 120 Picture = "FRMGAMES.frx":EAED ScaleHeight = 225 ScaleWidth = 225 TabIndex = 65 Top = 2760 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 210 Index = 30 Left = 900 Picture = "FRMGAMES.frx":F01F ScaleHeight = 210 ScaleWidth = 210 TabIndex = 64 Top = 2160 Width = 210 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 210 Index = 29 Left = 5340 Picture = "FRMGAMES.frx":F541 ScaleHeight = 210 ScaleWidth = 210 TabIndex = 63 Top = 1740 Width = 210 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 28 Left = 4695 Picture = "FRMGAMES.frx":FA63 ScaleHeight = 225 ScaleWidth = 225 TabIndex = 62 Top = 1680 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 27 Left = 4200 Picture = "FRMGAMES.frx":FF95 ScaleHeight = 225 ScaleWidth = 225 TabIndex = 61 Top = 2220 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 26 Left = 3720 Picture = "FRMGAMES.frx":104C7 ScaleHeight = 225 ScaleWidth = 225 TabIndex = 60 Top = 1650 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 25 Left = 3240 Picture = "FRMGAMES.frx":109F9 ScaleHeight = 225 ScaleWidth = 225 TabIndex = 59 Top = 1980 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 210 Index = 24 Left = 2580 Picture = "FRMGAMES.frx":10F2B ScaleHeight = 210 ScaleWidth = 210 TabIndex = 58 Top = 2145 Width = 210 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 23 Left = 1995 Picture = "FRMGAMES.frx":1144D ScaleHeight = 225 ScaleWidth = 225 TabIndex = 57 Top = 1845 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 22 Left = 1350 Picture = "FRMGAMES.frx":1197F ScaleHeight = 225 ScaleWidth = 225 TabIndex = 56 Top = 1575 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 21 Left = 630 Picture = "FRMGAMES.frx":11EB1 ScaleHeight = 225 ScaleWidth = 225 TabIndex = 47 Top = 1545 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 20 Left = 180 Picture = "FRMGAMES.frx":123E3 ScaleHeight = 225 ScaleWidth = 225 TabIndex = 46 Top = 2100 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 19 Left = 5280 Picture = "FRMGAMES.frx":12915 ScaleHeight = 225 ScaleWidth = 225 TabIndex = 43 Top = 1080 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 18 Left = 4740 Picture = "FRMGAMES.frx":12E47 ScaleHeight = 225 ScaleWidth = 225 TabIndex = 42 Top = 780 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 17 Left = 4230 Picture = "FRMGAMES.frx":13379 ScaleHeight = 225 ScaleWidth = 225 TabIndex = 41 Top = 1215 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 210 Index = 16 Left = 3660 Picture = "FRMGAMES.frx":138AB ScaleHeight = 210 ScaleWidth = 210 TabIndex = 40 Top = 960 Width = 210 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 15 Left = 2970 Picture = "FRMGAMES.frx":13DCD ScaleHeight = 225 ScaleWidth = 225 TabIndex = 39 Top = 1365 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 14 Left = 2475 Picture = "FRMGAMES.frx":142FF ScaleHeight = 225 ScaleWidth = 225 TabIndex = 38 Top = 870 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 13 Left = 2205 Picture = "FRMGAMES.frx":14831 ScaleHeight = 225 ScaleWidth = 225 TabIndex = 37 Top = 1365 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 12 Left = 1620 Picture = "FRMGAMES.frx":14D63 ScaleHeight = 225 ScaleWidth = 225 TabIndex = 36 Top = 975 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 11 Left = 810 Picture = "FRMGAMES.frx":15295 ScaleHeight = 225 ScaleWidth = 225 TabIndex = 35 Top = 900 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 210 Index = 10 Left = 165 Picture = "FRMGAMES.frx":157C7 ScaleHeight = 210 ScaleWidth = 210 TabIndex = 34 Top = 1125 Width = 210 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 9 Left = 5265 Picture = "FRMGAMES.frx":15CE9 ScaleHeight = 225 ScaleWidth = 225 TabIndex = 33 Top = 345 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 210 Index = 8 Left = 4725 Picture = "FRMGAMES.frx":1621B ScaleHeight = 210 ScaleWidth = 210 TabIndex = 32 Top = 135 Width = 210 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 7 Left = 4140 Picture = "FRMGAMES.frx":1673D ScaleHeight = 225 ScaleWidth = 225 TabIndex = 31 Top = 480 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 6 Left = 3615 Picture = "FRMGAMES.frx":16C6F ScaleHeight = 225 ScaleWidth = 225 TabIndex = 30 Top = 105 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 5 Left = 3060 Picture = "FRMGAMES.frx":171A1 ScaleHeight = 225 ScaleWidth = 225 TabIndex = 29 Top = 525 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 210 Index = 4 Left = 2610 Picture = "FRMGAMES.frx":176D3 ScaleHeight = 210 ScaleWidth = 210 TabIndex = 28 Top = 180 Width = 210 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 3 Left = 1905 Picture = "FRMGAMES.frx":17BF5 ScaleHeight = 225 ScaleWidth = 225 TabIndex = 27 Top = 315 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 2 Left = 1140 Picture = "FRMGAMES.frx":18127 ScaleHeight = 225 ScaleWidth = 225 TabIndex = 26 Top = 360 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 1 Left = 570 Picture = "FRMGAMES.frx":18659 ScaleHeight = 225 ScaleWidth = 225 TabIndex = 25 Top = 60 Width = 225 End Begin VB.PictureBox picPlanet Appearance = 0 'Flat AutoSize = -1 'True BackColor = &H80000005& BorderStyle = 0 'None ForeColor = &H80000008& Height = 225 Index = 0 Left = 150 Picture = "FRMGAMES.frx":18B8B ScaleHeight = 225 ScaleWidth = 225 TabIndex = 24 Top = 480 Width = 225 End End Begin VB.Frame fraOptions Caption = "Game Options" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 1260 Left = 90 TabIndex = 107 Top = 5145 Width = 1410 End Begin VB.Label lblTitle2 BackStyle = 0 'Transparent Caption = "A.D." BeginProperty Font Name = "Times New Roman" Size = 24 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00000080& Height = 495 Left = 300 TabIndex = 122 Top = 450 Width = 945 End Begin VB.Label lblTitle BackStyle = 0 'Transparent Caption = "4000" BeginProperty Font Name = "Times New Roman" Size = 24 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty ForeColor = &H00000080& Height = 510 Left = 225 TabIndex = 121 Top = 30 Width = 1050 End Begin VB.Label lblE Caption = "E" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 195 Left = 6900 TabIndex = 22 Top = 1020 Width = 255 End Begin VB.Label lblD Caption = "D" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 195 Left = 5820 TabIndex = 21 Top = 1020 Width = 195 End Begin VB.Label lblC Caption = "C" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 255 Left = 4620 TabIndex = 20 Top = 1020 Width = 195 End Begin VB.Label lblB Caption = "B" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 195 Left = 3480 TabIndex = 19 Top = 1020 Width = 195 End Begin VB.Label lblA Caption = "A" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 195 Left = 2340 TabIndex = 18 Top = 1020 Width = 195 End Begin VB.Label lblFive Caption = "5" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 255 Left = 1620 TabIndex = 17 Top = 4800 Width = 195 End Begin VB.Label lblFour Caption = "4" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 255 Left = 1620 TabIndex = 16 Top = 3960 Width = 195 End Begin VB.Label lblThree Caption = "3" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 255 Left = 1620 TabIndex = 15 Top = 3180 Width = 135 End Begin VB.Label lblTwo Caption = "2" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 315 Left = 1620 TabIndex = 14 Top = 2400 Width = 195 End Begin VB.Label lblOne Caption = "1" BeginProperty Font Name = "MS Sans Serif" Size = 8.25 Charset = 0 Weight = 700 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty Height = 255 Left = 1620 TabIndex = 13 Top = 1560 Width = 195 End Attribute VB_Name = "frmGameScreen" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Option Explicit 'declare the function keys Const vbKeyF1 = &H70 'for help Const vbKeyF2 = &H71 'to save the game Const vbKeyF3 = &H72 'to quit without saving Const vbKeyF4 = &H73 Dim CloakingChecked(2) As Boolean 'so cloaked ships are only checked once/turn 'to see if they're hidden or not Public Warp7WarningGiven As Boolean Public Warp8WarningGiven As Boolean 'to limit the warp path warnings to once at 'the beginning of the turn, and again when 'the player hits cmdendturn Public NumPlanets1 As Integer 'checks number of planets in range on warp 8 'if zero, ship is destroyed Public NumPlanets2 As Integer 'same, for ship 2 Public GridLinesOn As Boolean 'whether or not the grid lines are showing Public ContaminationWarningGiven As Boolean 'to only show contamination results msgbox once/turn Private Sub cmdAbort_Click() 'abort the game without saving PlaySoundEffect "Button2" If MsgBox("Are you sure you want to quit without saving?", vbQuestion + vbYesNo, "Abort Turn") = vbYes Then PlaySoundEffect "Abort" Dim Counter For Counter = 1 To 100000 Next Counter 'deregister help file QuitHelp 'turn off scanner If ScannerOn Then cmdScan_Click ScannerOn = False cmdScan.Enabled = False End If If TurnNumber = 1 Then 'for some as-yet unknown reason (at least to me), 'the program will not shut all the way down on turn 1 'unless I use End - I know it makes no sense, but... End Else '***Alternative to using End: Dim F As Long 'fade form into taskbar Me.WindowState = 1 'count forms opened For F = Forms.Count - 1 To 0 Step -1 Unload Forms(F) Next F 'close any open files If (Forms.Count = 0) Then Close 'set all open forms to Nothing Set frmGameScreen = Nothing End If End If End Sub Private Sub cmdAbort_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) txtStatus.ForeColor = vbGreen txtStatus.Text = "Quit without saving" End Sub Private Sub cmdCleanup_Click() 'detoxify planet contaminated by biorocket Dim ResourceFlag As Boolean 'adds second line to msgbox, showing extra resources Dim Q As Integer 'extra resources if currently < 2 'added check for money If Planet(ActivePlanet).Contaminated And Player(Current).BioCleanupResearched Then UnitCost = 10 If Player(Current).NumResources >= UnitCost Then PlaySoundEffect "Button2" If MsgBox("Detoxify this planet?", vbYesNo, "") = vbYes Then 'deduct cost of cleanup Player(Current).NumResources = Player(Current).NumResources - UnitCost UpdatePlayerStats Planet(ActivePlanet).Contaminated = False 'add 1-2 resources if planet has < 2 If Planet(ActivePlanet).Resources < 2 Then 'rejuvenate 1-2 resources Randomize Q = Int(Rnd * 1) + 1 Planet(ActivePlanet).Resources = Planet(ActivePlanet).Resources + Q End If Dim Msg As String Msg = "Planetary environment now suitable for Humans" If ResourceFlag Then Msg = Msg + Chr(13) + "Resource Production increased to " + Str(Planet(ActivePlanet).Resources) ResourceFlag = False End If PlaySoundEffect "Quiet" MsgBox Msg, , "Detoxification complete" 'restore planet picture Select Case Planet(ActivePlanet).BackGround Case 1 picPlanet(ActivePlanet).Picture = picPlanet1.Picture Case 2 picPlanet(ActivePlanet).Picture = picPlanet2.Picture Case 3 picPlanet(ActivePlanet).Picture = picPlanet3.Picture Case 4 picPlanet(ActivePlanet).Picture = picPlanet4.Picture Case 5 picPlanet(ActivePlanet).Picture = picPlanet5.Picture End Select End If Else 'insufficient funds PlaySoundEffect "Quiet" MsgBox "Detoxification costs 10 resource units", vbExclamation, "Insufficient Resources" End If End If End Sub Private Sub cmdCleanup_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) txtStatus.Text = "Detoxify Planet Contaminated By BioHazard" End Sub Private Sub cmdEndTurn_Click() 'save the game PlaySoundEffect "Button2" If MsgBox("Save this turn?", vbYesNo + vbQuestion, "Ending Turn") = vbYes Then 'advance ships on warp path if not landed If Player(Current).Ship(0).WarpPosition = 8 Or Player(Current).Ship(1).WarpPosition = 8 Then 'don't end turn until player lands ship PlaySoundEffect "Disintegrate" MsgBox "Your ship must land this turn", vbExclamation, "Warp Limit" Exit Sub End If 'confirm ending turn, then give message to player Dim z As Integer For z = 0 To 1 If Player(Current).Ship(z).Launched Then Player(Current).Ship(z).WarpPosition = Player(Current).Ship(z).WarpPosition + 1 End If Next z 'set it to the next turn if player 2 is finishing up If Current = 1 Then TurnNumber = TurnNumber + 1 End If 'turn off scanner If ScannerOn Then cmdScan_Click ScannerOn = False cmdScan.Enabled = False End If 'save planet and player info to a file, then end WriteBigFile 'here's where zlib is used to compress the file just written frmCompress.Show Modal 'frmCompress calls frmContinue for choice of main menu or quit 'if main menu, then this form is unloaded by frmContinue End If End Sub Private Sub cmdEndTurn_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) txtStatus.ForeColor = vbGreen txtStatus.Text = "End Turn, Prepare Information File for Upload" End Sub Private Sub cmdLandShip1_Click() 'figure out which planets are available for landing Dim Count As Integer Dim x1, y1, X2, Y2 Dim a As Integer Dim b As Integer Dim Distance Dim RangeLow, RangeHigh Dim xpos, ypos, radius 'set toggle state: If ReadyToLand1 = True Then ReadyToLand1 = False ElseIf ReadyToLand1 = False Then ReadyToLand1 = True End If If ReadyToLand1 Then cmdLandShip2.Enabled = False cmdPreviewShip1.Enabled = False cmdPreviewShip2.Enabled = False cmdPreviewEnemy1.Enabled = False cmdPreviewEnemy2.Enabled = False ElseIf ReadyToLand1 = False Then If Player(Current).Ship(1).Launched Then cmdLandShip2.Enabled = True End If cmdPreviewShip1.Enabled = True cmdPreviewShip2.Enabled = True cmdPreviewEnemy1.Enabled = True cmdPreviewEnemy2.Enabled = True End If 'set activeship to appropriate ship number activeship = 0 'clear the board of any inrange settings Dim z For z = 0 To 49 Planet(z).InRange = False Next z 'Check for UltraWarp and set ranges If Player(Current).UltraWarpResearched Then 'increased range RangeLow = Player(Current).Ship(0).WarpPosition * 250 RangeHigh = RangeLow + 700 ElseIf Player(Current).UltraWarpResearched = False Then 'lower ranges RangeLow = Player(Current).Ship(0).WarpPosition * 250 RangeHigh = RangeLow + 350 End If 'ship's starting position - originating planet x1 = Player(Current).Ship(0).CenterX y1 = Player(Current).Ship(0).CenterY 'check distance from home planet to each other planet 'if within the range, set planet's InRange to true For Count = 0 To 49 X2 = picPlanet(Count).Left + (picPlanet(Count).Width / 2) Y2 = picPlanet(Count).Top + (picPlanet(Count).Height / 2) a = Abs(x1 - X2) b = Abs(y1 - Y2) Distance = Int(Sqr(a ^ 2 + b ^ 2)) If Distance >= RangeLow And Distance <= RangeHigh And picPlanet(Count).Visible Then 'planet is within range - set value Planet(Count).InRange = True End If Next Count 'if in range, draw circle For Count = 0 To 49 If Planet(Count).InRange And picPlanet(Count).Visible Then 'find center of the picturebox and draw circle xpos = picPlanet(Count).Left + (picPlanet(Count).Width / 2) ypos = picPlanet(Count).Top + (picPlanet(Count).Height / 2) radius = (picPlanet(Count).Width / 2) + 45 picGalaxy.DrawMode = 7 picGalaxy.DrawWidth = 1 picGalaxy.Circle (xpos, ypos), radius, vbYellow End If Next Count End Sub Private Sub cmdLandShip1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) txtStatus.Text = "Prepare Ship 1 for Attack/Landing" End Sub Private Sub cmdLandShip2_Click() 'figure out which planets are available for landing Dim Count As Integer Dim x1, y1, X2, Y2 Dim a As Integer Dim b As Integer Dim Distance Dim RangeLow, RangeHigh Dim xpos, ypos, radius 'set toggle state: If ReadyToLand2 = True Then ReadyToLand2 = False ElseIf ReadyToLand2 = False Then ReadyToLand2 = True End If If ReadyToLand2 Then cmdLandShip1.Enabled = False cmdPreviewShip1.Enabled = False cmdPreviewShip2.Enabled = False cmdPreviewEnemy1.Enabled = False cmdPreviewEnemy2.Enabled = False ElseIf ReadyToLand2 = False Then '**see if other ship launched If Player(Current).Ship(0).Launched Then cmdLandShip1.Enabled = True End If cmdPreviewShip1.Enabled = True cmdPreviewShip2.Enabled = True cmdPreviewEnemy1.Enabled = True cmdPreviewEnemy2.Enabled = True End If 'set activeship to appropriate ship number activeship = 1 'clear the board of any inrange settings Dim z For z = 0 To 49 Planet(z).InRange = False Next z 'Check for UltraWarp and set ranges If Player(Current).UltraWarpResearched Then 'increased range RangeLow = Player(Current).Ship(1).WarpPosition * 250 RangeHigh = RangeLow + 700 ElseIf Player(Current).UltraWarpResearched = False Then 'lower ranges RangeLow = Player(Current).Ship(1).WarpPosition * 250 RangeHigh = RangeLow + 350 End If 'ship's starting position - originating planet x1 = Player(Current).Ship(1).CenterX y1 = Player(Current).Ship(1).CenterY 'check distance from home planet to each other planet 'if within the range, set planet's InRange to true For Count = 0 To 49 X2 = picPlanet(Count).Left + (picPlanet(Count).Width / 2) Y2 = picPlanet(Count).Top + (picPlanet(Count).Height / 2) a = Abs(x1 - X2) b = Abs(y1 - Y2) Distance = Int(Sqr(a ^ 2 + b ^ 2)) If Distance >= RangeLow And Distance <= RangeHigh Then 'planet is within range - set value Planet(Count).InRange = True End If Next Count 'if in range, draw circle For Count = 0 To 49 If Planet(Count).InRange And picPlanet(Count).Visible Then 'find center of the picturebox and draw circle xpos = picPlanet(Count).Left + (picPlanet(Count).Width / 2) ypos = picPlanet(Count).Top + (picPlanet(Count).Height / 2) radius = (picPlanet(Count).Width / 2) + 45 picGalaxy.DrawMode = 7 picGalaxy.DrawWidth = 1 picGalaxy.Circle (xpos, ypos), radius, vbYellow End If Next Count End Sub Private Sub cmdLandShip2_LostFocus() 'EraseCircles End Sub Private Sub cmdLandShip2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) txtStatus.Text = "Prepare Ship 2 for Attack/Landing" End Sub Private Sub cmdLaunch_Click() 'launch a ship PlaySoundEffect "Button4" 'check to see if a new planet - can't take off this turn Dim msg1 As String msg1 = "Engines being re-tooled after landing:" & Chr(13) msg1 = msg1 + "Ship cannot launch this turn." If Planet(ActivePlanet).JustLanded Then PlaySoundEffect "Quiet" MsgBox msg1, vbOKOnly + vbExclamation, "Operation Terminated" Exit Sub ElseIf Player(Current).Ship(0).Launched And Player(Current).Ship(1).Launched Then PlaySoundEffect "Quiet" MsgBox "No ships available for launch", vbOKOnly, "Launch Cancelled" Exit Sub 'load the launch form frmLaunch.Show Modal End If End Sub Private Sub cmdLaunch_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) txtStatus.Text = "Prepare a ship for launch" End Sub Private Sub cmdLaunchBioRocket_Click() 'launch biorocket - check if planets in range PlaySoundEffect "Button4" Dim Range Dim x1, y1, X2, Y2 Dim Count Dim a, b Dim Distance Dim RocketCost RocketCost = 30 'set toggle state: If BioRocketOn = True Then BioRocketOn = False Planet(ActivePlanet).LaunchSite = False ElseIf BioRocketOn = False Then BioRocketOn = True Planet(ActivePlanet).LaunchSite = True End If If Player(Current).BioRocketResearched And Player(Current).NumResources >= RocketCost Then 'continue 'set range If Player(Current).LongBioResearched Then Range = 1200 Else Range = 750 End If 'clear the board of any inbiorange settings Dim z For z = 0 To 49 Planet(z).InBioRange = False Next z 'rocket's centre - originating planet x1 = picPlanet(ActivePlanet).Left + (picPlanet(ActivePlanet).Width / 2) y1 = picPlanet(ActivePlanet).Top + (picPlanet(ActivePlanet).Height / 2) 'check distance from source planet to each other planet 'if within the range and visible (ie. different galaxy sizes), 'then set planet's InBioRange to true For Count = 0 To 49 X2 = picPlanet(Count).Left + (picPlanet(Count).Width / 2) Y2 = picPlanet(Count).Top + (picPlanet(Count).Height / 2) a = Abs(x1 - X2) b = Abs(y1 - Y2) Distance = Int(Sqr(a ^ 2 + b ^ 2)) If Distance <= Range And picPlanet(Count).Visible Then Planet(Count).InBioRange = True Planet(Count).BioDistance = Distance End If Next Count 'Disallow targeting of planets you own For Count = 0 To 49 If Planet(Count).Owner = Current Then Planet(Count).InBioRange = False End If Next Count 'if in range and visible, draw line For Count = 0 To 49 If Planet(Count).InBioRange And picPlanet(Count).Visible Then 'find center of the picturebox and draw line X2 = picPlanet(Count).Left + (picPlanet(Count).Width / 2) Y2 = picPlanet(Count).Top + (picPlanet(Count).Height / 2) picGalaxy.DrawWidth = 2 picGalaxy.DrawMode = 7 picGalaxy.Line (x1, y1)-(X2, Y2), vbMagenta End If Next Count 'not enough money, or don't have technology PlaySoundEffect "Quiet" MsgBox "Insufficient funds - BioHazard Rockets" + Chr(13) + "cost 30 resource units each", vbOKOnly + vbInformation, "Launch Cancelled" Exit Sub End If End Sub Private Sub cmdLaunchBioRocket_LostFocus() 'EraseLines (ActivePlanet) End Sub Private Sub cmdLaunchBioRocket_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) txtStatus.Text = "Launch BioHazard Rocket" End Sub Private Sub cmdOK_Click() 'put the purchase order through 'and update the player and planet stats 'uses horizontal scroll bar hsbQuantity to set # of units purchased PlaySoundEffect "Button1" Select Case lblItemName.Caption Case "Missile Defences" 'Buy missile defenses for planet 'Cost: 10, Adds 5 to combatstrength 'exit sub if planet already has missiles If Planet(ActivePlanet).HaveMissiles Then Exit Sub End If Player(Current).NumResources = Player(Current).NumResources - PurchasePrice UpdatePlayerStats 'add to planet's combatstrength if hsbquantity >0 If hsbQuantity.Value > 0 Then Planet(ActivePlanet).HaveMissiles = True SetCombatStrength (ActivePlanet) End If Case "Planetary Shield" 'Buy shield defense for planet 'Cost:20, Adds 25 to combatstrength Player(Current).NumResources = Player(Current).NumResources - PurchasePrice UpdatePlayerStats 'add to planet's combatstrength if hsbquantity>0 If hsbQuantity.Value > 0 Then Planet(ActivePlanet).HaveShields = True SetCombatStrength (ActivePlanet) End If Case "Troops" 'update #troops for player and for planet Player(Current).NumTroops = Player(Current).NumTroops + Quantity Planet(ActivePlanet).Troops = Planet(ActivePlanet).Troops + Quantity Player(Current).NumResources = Player(Current).NumResources - PurchasePrice 'call update procedure UpdatePlayerStats SetCombatStrength (ActivePlanet) Case "Assault Mechs" 'update #assault troops for player and planet Player(Current).NumAssaultTroops = Player(Current).NumAssaultTroops + Quantity Planet(ActivePlanet).AssaultTroops = Planet(ActivePlanet).AssaultTroops + Quantity Player(Current).NumResources = Player(Current).NumResources - PurchasePrice 'call update procedure UpdatePlayerStats SetCombatStrength (ActivePlanet) Case "Improved Resource Production" 'Increase planet's resource production 'Cost: 15, Adds random 2-5 to planet's resources 'set flag that this planet has improved resources if hsbquantity>0 If hsbQuantity.Value > 0 Then 'add to planet's resources Dim Increase As Integer Increase = Int(Rnd * 3) + 2 Planet(ActivePlanet).Resources = Planet(ActivePlanet).Resources + Increase 'set improved flag Planet(ActivePlanet).ImprovedResources = True 'charge the player Player(Current).NumResources = Player(Current).NumResources - PurchasePrice UpdatePlayerStats End If Case "Scanner" 'Cost: 25, lets player see detailed info on surrounding planets Player(Current).NumResources = Player(Current).NumResources - PurchasePrice UpdatePlayerStats 'set flag that this planet has scanner '***if quantity=1 If hsbQuantity.Value > 0 Then Planet(ActivePlanet).HaveScanner = True End If Case "Scanner Jamming Device" 'Cost: 15 'PurchasePrice = 15 Player(Current).NumResources = Player(Current).NumResources - PurchasePrice UpdatePlayerStats 'set flag that this planet has scanner jamming device If hsbQuantity.Value > 0 Then Planet(ActivePlanet).HaveJammer = True End If End Select 'reset the scroll bar and labels cmdLaunch.Enabled = False ClearFrame 'disable landing frame only if no ships launched If Player(Current).Ship(0).Launched = False And Player(Current).Ship(1).Launched = False Then fraLanding.Enabled = False End If End Sub Private Sub cmdPlanetName_Click() 'go to the landscape view frmLandscape.Show Modal End Sub Private Sub cmdPlanetName_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) txtStatus.Text = "Click here to view the planet" End Sub Private Sub cmdPreviewEnemy1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) 'figure out which planets are available for enemy landing next turn 'exit sub if warp scanner not researched If Player(Current).WarpScannerResearched = False Then 'don't do the preview at all PlaySoundEffect "Quiet" MsgBox "No landing data available", vbInformation + vbOKOnly, "Probe Error" Exit Sub End If '*********************** 'In form_activate, there is a base 98% chance of a cloaked ship staying hidden. 'If the current player has the warp scanner, there is an 75% chance, +/- 5%, of remaining 'hidden. I'm not sure if that's too high... 'Either the chance of being hidden in the first place is reduced if the player 'has a warp scanner (ie. by 50%), or I have to recalculate the chance of successfully 'previewing the ship's landing sites here. '*********************** If Player(Other).Ship(0).HaveCloakingDevice And Player(Other).Ship(0).Hidden Then 'don't do the preview at all PlaySoundEffect "Quiet" MsgBox "No landing data available", vbInformation + vbOKOnly, "Probe Error" Exit Sub End If 'first, see if there's a ship in the warp path If Player(Other).Ship(0).Launched Then Dim Count As Integer Dim x1, y1, X2, Y2 Dim a As Integer Dim b As Integer Dim Distance Dim RangeLow, RangeHigh Dim xpos, ypos, radius 'clear the board of any inrange settings Dim z For z = 0 To 49 Planet(z).InRange = False Next z 'Check for UltraWarp and set ranges If Player(Other).UltraWarpResearched Then 'increased range RangeLow = Player(Other).Ship(0).WarpPosition * 250 RangeHigh = RangeLow + 700 ElseIf Player(Other).UltraWarpResearched = False Then 'lower ranges RangeLow = Player(Other).Ship(0).WarpPosition * 250 RangeHigh = RangeLow + 350 End If 'ship's starting position - originating planet x1 = Player(Other).Ship(0).CenterX y1 = Player(Other).Ship(0).CenterY For Count = 0 To 49 'check distance from home planet to each other planet 'if within the range, set planet's InRange to true 'use centre of planets, not top left corner X2 = picPlanet(Count).Left + (picPlanet(Count).Width / 2) Y2 = picPlanet(Count).Top + (picPlanet(Count).Height / 2) a = Abs(x1 - X2) b = Abs(y1 - Y2) Distance = Int(Sqr(a ^ 2 + b ^ 2)) If Distance >= RangeLow And Distance <= RangeHigh And picPlanet(Count).Visible Then 'planet is within range - set value Planet(Count).InRange = True 'find center of the picturebox and draw circle xpos = picPlanet(Count).Left + (picPlanet(Count).Width / 2) ypos = picPlanet(Count).Top + (picPlanet(Count).Height / 2) radius = (picPlanet(Count).Width / 2) + 45 'set drawmode picGalaxy.DrawMode = 7 picGalaxy.DrawWidth = 1 picGalaxy.Circle (xpos, ypos), radius, vbRed End If Next Count 'if no ship in the warp path, error message PlaySoundEffect "Quiet" MsgBox "No landing data available", vbInformation + vbOKOnly, "Probe Error" End If End Sub Private Sub cmdPreviewEnemy1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) 'redraw the circles to erase them 'if cloaked, don't do this routine at all If Player(Other).Ship(0).HaveCloakingDevice And Player(Other).Ship(0).Hidden Then 'don't do the preview at all Exit Sub End If Dim xpos, ypos, radius Dim z For z = 0 To 49 If Planet(z).InRange And picPlanet(z).Visible Then 'find center of the picturebox and draw circle xpos = picPlanet(z).Left + (picPlanet(z).Width / 2) ypos = picPlanet(z).Top + (picPlanet(z).Height / 2) radius = (picPlanet(z).Width / 2) + 45 'set drawmode picGalaxy.DrawMode = 7 picGalaxy.DrawWidth = 1 picGalaxy.Circle (xpos, ypos), radius, vbRed End If Next z End Sub Private Sub cmdPreviewEnemy2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) 'figure out which planets are available for enemy landing next turn 'exit sub if warp scanner not researched If Player(Current).WarpScannerResearched = False Then 'don't do the preview at all PlaySoundEffect "Quiet" MsgBox "No landing data available", vbInformation + vbOKOnly, "Probe Error" Exit Sub End If If Player(Other).Ship(1).HaveCloakingDevice And Player(Other).Ship(1).Hidden Then 'don't do the preview at all PlaySoundEffect "Quiet" MsgBox "No landing data available", vbInformation + vbOKOnly, "Probe Error" Exit Sub End If If Player(Other).Ship(1).Launched Then Dim Count As Integer Dim x1, y1, X2, Y2 Dim a As Integer Dim b As Integer Dim Distance Dim RangeLow, RangeHigh Dim xpos, ypos, radius 'clear the board of any inrange settings Dim z For z = 0 To 49 Planet(z).InRange = False Next z 'Check for UltraWarp and set ranges If Player(Other).UltraWarpResearched Then 'increased range RangeLow = Player(Other).Ship(1).WarpPosition * 250 RangeHigh = RangeLow + 700 ElseIf Player(Other).UltraWarpResearched = False Then 'lower ranges RangeLow = Player(Other).Ship(1).WarpPosition * 250 RangeHigh = RangeLow + 350 End If 'ship's starting position - originating planet x1 = Player(Other).Ship(1).CenterX y1 = Player(Other).Ship(1).CenterY For Count = 0 To 49 'check distance from home planet to each other planet 'if within the range, set planet's InRange to true 'use centre of planets, not top left corner X2 = picPlanet(Count).Left + (picPlanet(Count).Width / 2) Y2 = picPlanet(Count).Top + (picPlanet(Count).Height / 2) a = Abs(x1 - X2) b = Abs(y1 - Y2) Distance = Int(Sqr(a ^ 2 + b ^ 2)) If Distance >= RangeLow And Distance <= RangeHigh And picPlanet(Count).Visible Then 'planet is within range - set value Planet(Count).InRange = True 'find center of the picturebox and draw circle xpos = picPlanet(Count).Left + (picPlanet(Count).Width / 2) ypos = picPlanet(Count).Top + (picPlanet(Count).Height / 2) radius = (picPlanet(Count).Width / 2) + 45 'set drawmode picGalaxy.DrawMode = 7 picGalaxy.DrawWidth = 1 picGalaxy.Circle (xpos, ypos), radius, vbRed End If Next Count PlaySoundEffect "Quiet" MsgBox "No landing data available", vbInformation + vbOKOnly, "Probe Error" End If End Sub Private Sub cmdPreviewEnemy2_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) 'redraw the circles to erase them 'if cloaked, don't do this routine at all If Player(Other).Ship(1).HaveCloakingDevice And Player(Other).Ship(1).Hidden Then 'don't do the preview at all Exit Sub End If Dim xpos, ypos, radius Dim z For z = 0 To 49 If Planet(z).InRange And picPlanet(z).Visible Then 'find center of the picturebox and draw circle xpos = picPlanet(z).Left + (picPlanet(z).Width / 2) ypos = picPlanet(z).Top + (picPlanet(z).Height / 2) radius = (picPlanet(z).Width / 2) + 45 'set drawmode picGalaxy.DrawMode = 7 picGalaxy.DrawWidth = 1 picGalaxy.Circle (xpos, ypos), radius, vbRed End If Next z End Sub Private Sub cmdPreviewShip1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) 'figure out which planets are available for landing Dim NumPlanetsInRange As Integer 'if none, tell player If Player(Current).Ship(0).Launched Then 'figure out which planets are available for landing Dim Count As Integer Dim x1, y1, X2, Y2 Dim a As Integer Dim b As Integer Dim Distance Dim RangeLow, RangeHigh Dim xpos, ypos, radius 'set activeship to appropriate ship number activeship = 0 'clear the board of any inrange settings Dim z For z = 0 To 49 Planet(z).InRange = False Next z 'Check for UltraWarp and set ranges If Player(Current).UltraWarpResearched Then 'increased range RangeLow = Player(Current).Ship(0).WarpPosition * 250 RangeHigh = RangeLow + 700 ElseIf Player(Current).UltraWarpResearched = False Then 'lower ranges RangeLow = Player(Current).Ship(0).WarpPosition * 250 RangeHigh = RangeLow + 350 End If 'ship's starting position - originating planet x1 = Player(Current).Ship(0).CenterX y1 = Player(Current).Ship(0).CenterY 'check distance from home planet to each other planet 'if within the range, set planet's InRange to true For Count = 0 To 49 'use centre of planets, not top left corner X2 = picPlanet(Count).Left + (picPlanet(Count).Width / 2) Y2 = picPlanet(Count).Top + (picPlanet(Count).Height / 2) a = Abs(x1 - X2) b = Abs(y1 - Y2) Distance = Int(Sqr(a ^ 2 + b ^ 2)) If Distance >= RangeLow And Distance <= RangeHigh Then 'planet is within range - set value Planet(Count).InRange = True NumPlanetsInRange = NumPlanetsInRange + 1 End If Next Count If NumPlanetsInRange = 0 Then PlaySoundEffect "Quiet" MsgBox "No planets in range this turn", vbOKOnly + vbInformation, "Attempting to Land Ship 1" Exit Sub End If 'if in range, draw circle For Count = 0 To 49 If Planet(Count).InRange And picPlanet(Count).Visible Then 'find center of the picturebox and draw circle xpos = picPlanet(Count).Left + (picPlanet(Count).Width / 2) ypos = picPlanet(Count).Top + (picPlanet(Count).Height / 2) radius = (picPlanet(Count).Width / 2) + 45 picGalaxy.DrawMode = 7 picGalaxy.DrawWidth = 1 picGalaxy.Circle (xpos, ypos), radius, vbYellow End If Next Count 'ship not launched PlaySoundEffect "Quiet" MsgBox "No landing data available", vbInformation + vbOKOnly, "Probe Error" End If End Sub Private Sub cmdPreviewShip1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) txtStatus.Text = "" End Sub Private Sub cmdPreviewShip1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) 'redraw the circles to erase them EraseCircles End Sub Private Sub cmdPreviewShip2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) 'figure out which planets are available for landing Dim NumPlanetsInRange As Integer 'if none, tell player If Player(Current).Ship(1).Launched Then 'figure out which planets are available for landing Dim Count As Integer Dim x1, y1, X2, Y2 Dim a As Integer Dim b As Integer Dim Distance Dim RangeLow, RangeHigh Dim xpos, ypos, radius 'set activeship to appropriate ship number activeship = 1 'clear the board of any inrange settings Dim z For z = 0 To 49 Planet(z).InRange = False Next z 'Check for UltraWarp and set ranges If Player(Current).UltraWarpResearched Then 'increased range RangeLow = Player(Current).Ship(1).WarpPosition * 250 RangeHigh = RangeLow + 700 ElseIf Player(Current).UltraWarpResearched = False Then 'lower ranges RangeLow = Player(Current).Ship(1).WarpPosition * 250 RangeHigh = RangeLow + 350 End If 'ship's starting position - originating planet x1 = Player(Current).Ship(1).CenterX y1 = Player(Current).Ship(1).CenterY 'check distance from home planet to each other planet 'if within the range, set planet's InRange to true For Count = 0 To 49 X2 = picPlanet(Count).Left + (picPlanet(Count).Width / 2) Y2 = picPlanet(Count).Top + (picPlanet(Count).Height / 2) a = Abs(x1 - X2) b = Abs(y1 - Y2) Distance = Int(Sqr(a ^ 2 + b ^ 2)) If Distance >= RangeLow And Distance <= RangeHigh Then 'planet is within range - set value Planet(Count).InRange = True NumPlanetsInRange = NumPlanetsInRange + 1 End If Next Count If NumPlanetsInRange = 0 Then PlaySoundEffect "Quiet" MsgBox "No planets in range this turn", vbOKOnly + vbInformation, "Attempting to Land Ship 2" Exit Sub End If 'if in range, draw circle For Count = 0 To 49 If Planet(Count).InRange And picPlanet(Count).Visible Then 'find center of the picturebox and draw circle xpos = picPlanet(Count).Left + (picPlanet(Count).Width / 2) ypos = picPlanet(Count).Top + (picPlanet(Count).Height / 2) radius = (picPlanet(Count).Width / 2) + 45 picGalaxy.DrawMode = 7 picGalaxy.DrawWidth = 1 picGalaxy.Circle (xpos, ypos), radius, vbYellow End If Next Count PlaySoundEffect "Quiet" MsgBox "No landing data available", vbInformation + vbOKOnly, "Probe Error" End If End Sub Private Sub cmdPreviewShip2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) txtStatus.Text = "" End Sub Private Sub cmdPreviewShip2_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) 'redraw the circles to erase them EraseCircles End Sub Private Sub cmdRegenerate_Click() 'Regenerate planet after detoxification, after biorocket damage If Planet(ActivePlanet).NukedResources And Player(Current).RegenerationResearched Then 'check if enough money UnitCost = 15 'defined globally in .bas module If Player(Current).NumResources >= UnitCost Then 'continue PlaySoundEffect "Button2" If MsgBox("Regenerate this planet?", vbYesNo, "") = vbYes Then 'deduct cost Player(Current).NumResources = Player(Current).NumResources - UnitCost UpdatePlayerStats Randomize Dim Num Num = Int(Rnd * 3) + 2 Planet(ActivePlanet).Resources = Planet(ActivePlanet).Resources + Num If Planet(ActivePlanet).Resources > 8 Then Planet(ActivePlanet).Resources = 8 End If PlaySoundEffect "Quiet" MsgBox "Resource regeneration successful." + Chr(13) + "Production Capacity Now" + Str(Planet(ActivePlanet).Resources) + " Resources/Turn", , "Regeneration Complete" Planet(ActivePlanet).NukedResources = False End If Else 'insufficient funds PlaySoundEffect "Quiet" MsgBox "Regeneration costs 15 resource units", vbExclamation, "Insufficient Resources" End If End If End Sub Private Sub cmdRegenerate_LostFocus() RegenerateOn = False End Sub Private Sub cmdRegenerate_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) txtStatus.Text = "Regenerate Barren Planet's Resource Capacity" End Sub Private Sub cmdRepairIndustry_Click() 'start by checking for enough money - cost of 10-15 'if not enough, msgbox saying what it costs, then exit sub 'else, do the rest Dim Msg As String 'for msgbox If Planet(ActivePlanet).Damaged Then 'check if enough money UnitCost = 10 'defined globally in .bas module If Player(Current).NumResources >= UnitCost Then 'deduct cost of repairs Player(Current).NumResources = Player(Current).NumResources - UnitCost UpdatePlayerStats 'add 2-3 resources Dim Repairs As Integer Randomize Repairs = Int(Rnd * 1) + 2 'add repairs to planet's resources Planet(ActivePlanet).Resources = Planet(ActivePlanet).Resources + Repairs 'ceiling of 8 resources If Planet(ActivePlanet).Resources > 8 Then Planet(ActivePlanet).Resources = 8 End If If Planet(ActivePlanet).Resources > 3 Then 'msgbox showing amt of improvement, and that further improvements need factory Msg = "Resource Production on " + Planet(ActivePlanet).Name + " increased by" + Str(Repairs) + " to" + Str(Planet(ActivePlanet).Resources) + " units" + Chr(13) Msg = Msg + "Further improvements require an Advanced Resource Production Facility" PlaySoundEffect "Quiet" MsgBox Msg, , "Industry Repair Results" 'set Damaged ppty to false to prevent further repairs Planet(ActivePlanet).Damaged = False cmdRepairIndustry.Enabled = False Else 'msgbox showing amt of improvement, and further repairs are ok Msg = "Resource Production on " + Planet(ActivePlanet).Name + " increased by" + Str(Repairs) + " to" + Str(Planet(ActivePlanet).Resources) + " units" + Chr(13) Msg = Msg + "Further repairs are possible." PlaySoundEffect "Quiet" MsgBox Msg, , "Industry Repair Results" End If Else PlaySoundEffect "Quiet" MsgBox "Repairs cost 10 resource units", vbExclamation, "Insufficient Resources" End If End If End Sub Private Sub cmdScan_Click() 'figure out which planets are in scanner range 'draw red circle, allow full details in mousemove PlaySoundEffect "Button4" Dim Count As Integer Dim x1, y1, X2, Y2 Dim a As Integer Dim b As Integer Dim Distance Dim Range Dim xpos, ypos, radius 'set toggle If ScannerOn = True Then ScannerOn = False ElseIf ScannerOn = False Then ScannerOn = True End If 'if scanner on, turn off buttons that screw things up If ScannerOn Then cmdPreviewShip1.Enabled = False cmdPreviewShip2.Enabled = False cmdPreviewEnemy1.Enabled = False cmdPreviewEnemy2.Enabled = False cmdLandShip1.Enabled = False cmdLandShip2.Enabled = False ElseIf ScannerOn = False Then cmdPreviewShip1.Enabled = True cmdPreviewShip2.Enabled = True cmdPreviewEnemy1.Enabled = True cmdPreviewEnemy2.Enabled = True If Player(Current).Ship(0).Launched Then cmdLandShip1.Enabled = True End If If Player(Current).Ship(1).Launched Then cmdLandShip2.Enabled = True End If End If 'clear the board of any inrange settings Dim z For z = 0 To 49 Planet(z).InScannerRange = False Next z 'set range If Player(Current).DeepScannerResearched Then Range = 1800 Range = 1200 End If 'scanner's centre - originating planet x1 = picPlanet(ActivePlanet).Left + (picPlanet(ActivePlanet).Width / 2) y1 = picPlanet(ActivePlanet).Top + (picPlanet(ActivePlanet).Height / 2) 'check distance from home planet to each other planet 'if within the range, set planet's InRange to true For Count = 0 To 49 X2 = picPlanet(Count).Left + (picPlanet(Count).Width / 2) Y2 = picPlanet(Count).Top + (picPlanet(Count).Height / 2) a = Abs(x1 - X2) b = Abs(y1 - Y2) Distance = Int(Sqr(a ^ 2 + b ^ 2)) If Distance <= Range Then 'check for jammer, or set as in range If Planet(Count).HaveJammer Then Planet(Count).InScannerRange = False ElseIf Planet(Count).HaveJammer = False Then Planet(Count).InScannerRange = True End If End If Next Count 'draw red circle showing range of scanner radius = Range picGalaxy.DrawMode = 7 picGalaxy.Circle (x1, y1), radius, vbRed End Sub Private Sub cmdScan_LostFocus() '**getting rid of this seems to clear up some conflict 'between the scanner and the landing buttons... 'scanner gets turned off when a foreign planet is clicked. 'cmdScan_Click 'clear the board of any inrange settings 'Dim z As Integer 'For z = 0 To 49 ' Planet(z).InScannerRange = False 'Next z End Sub Private Sub cmdViewSend_Click() 'play monitor sound PlaySoundEffect "Button3" '***see if ships being landed, if so, turn them off If ReadyToLand1 Then cmdLandShip1_Click End If If ReadyToLand2 Then cmdLandShip2_Click End If 'bring up the message console form frmMessageConsole.Show Modal 'turn off scanner If ScannerOn Then cmdScan_Click ScannerOn = False cmdScan.Enabled = False End If End Sub Private Sub cmdViewSend_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) txtStatus.Text = "View or Send Messages" End Sub Private Sub Form_Activate() 'set value of cmdland1 and 2 toggles: ReadyToLand1 = False ReadyToLand2 = False 'put player number under owned planets Dim Count As Integer For Count = 0 To 49 If Planet(Count).Owner = Current Then picGalaxy.CurrentX = picPlanet(Count).Left + (picPlanet(Count).Width / 2) - 25 picGalaxy.CurrentY = picPlanet(Count).Top + picPlanet(Count).Height + 15 picGalaxy.ForeColor = vbYellow picGalaxy.Print Str(Current + 1) ElseIf Planet(Count).Owner = Other Then picGalaxy.CurrentX = picPlanet(Count).Left + (picPlanet(Count).Width / 2) - 25 picGalaxy.CurrentY = picPlanet(Count).Top + picPlanet(Count).Height + 15 picGalaxy.ForeColor = vbRed picGalaxy.Print Str(Other + 1) End If Next Count 'put ships on the warp path with coordinates printed below '***** RefreshWarpPath '***** Dim z 'counter Dim j, k 'hold warp positions - easier to type & read For z = 0 To 1 If Player(Other).Ship(z).Launched Then k = Player(Other).Ship(z).WarpPosition If Player(Other).Ship(z).HaveCloakingDevice And CloakingChecked(z) = False Then ' '******see if ship is hidden********* Randomize Dim ChanceOfHiding As Integer Dim Result ChanceOfHiding = 98 'set base chance of being hidden 'chance lowered if current player has the warp scanner If Player(Current).WarpScannerResearched Then ChanceOfHiding = 75 ChanceOfHiding = ChanceOfHiding + Int(Rnd * 5) ChanceOfHiding = ChanceOfHiding - Int(Rnd * 5) End If Result = Int(Rnd * 100) + 1 If Result <= ChanceOfHiding Then 'don't show picture on path Debug.Print "Chance of hiding: ", ChanceOfHiding, "greater than/equal to Result: ", Result, "therefore, NOT showing" Player(Other).Ship(z).Hidden = True CloakingChecked(z) = True Else 'ship is not hidden this turn Player(Other).Ship(z).Hidden = False Debug.Print "Chance: ", ChanceOfHiding, "Result: ", Result, "NOT HIDDEN!" 'show picture picEnemyPath(k - 1).Picture = picTemp.Picture 'set cursor at bottom right corner picEnemyPath(k - 1).CurrentX = 290 picEnemyPath(k - 1).CurrentY = 425 picEnemyPath(k - 1).Print Player(Other).Ship(z).Coordinate CloakingChecked(z) = True End If Else 'put picture on enemy path - IF NOT HIDDEN!! If Player(Other).Ship(z).Hidden = False Then picEnemyPath(k - 1).Picture = picTemp.Picture 'set cursor at bottom right corner picEnemyPath(k - 1).CurrentX = 290 picEnemyPath(k - 1).CurrentY = 425 picEnemyPath(k - 1).Print Player(Other).Ship(z).Coordinate End If End If End If Next z 'enable the landing frame if either ship is in warp If Player(Current).Ship(0).Launched Or Player(Current).Ship(1).Launched Then fraLanding.Enabled = True End If 'enable the landing buttons if ships are launched If Player(Current).Ship(0).Launched Then cmdLandShip1.Enabled = True End If If Player(Current).Ship(1).Launched Then cmdLandShip2.Enabled = True End If 'enable the preview buttons cmdPreviewShip1.Enabled = True cmdPreviewShip2.Enabled = True cmdPreviewEnemy1.Enabled = True cmdPreviewEnemy2.Enabled = True '******************************** 'check for contamination - set picture Dim h For h = 0 To 49 If Planet(h).Contaminated Then picPlanet(h).Cls picPlanet(h).Picture = picNuclear.Picture End If Next h 'Check for Contaminated Planets - damage done every turn humans on planet Dim X As Integer If ContaminationWarningGiven = False Then For X = 0 To 49 If Planet(X).Owner = Current And Planet(X).Contaminated Then 'figure out damage BioDamage (X) ContaminationWarningGiven = True End If Next X End If 'unload cover form Unload frmCover End Sub Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) 'trap the function keys Select Case KeyCode Case vbKeyEscape 'show quick help screen PlaySoundEffect "Button3" 'call sub from Declare.bas ShowQuickHelp Case vbKeyF2 'Save game and exit cmdEndTurn.Value = True Case vbKeyF3 'Exit without saving cmdAbort.Value = True Case vbKeyF4 'toggle grid lines If GridLinesOn = False Then DrawGridLines GridLinesOn = True ElseIf GridLinesOn = True Then EraseGridLines GridLinesOn = False End If Case vbKeyF5 'toggle sound If SoundOn = False Then SoundOn = True ElseIf SoundOn = True Then SoundOn = False End If Case vbKeyF6 PlaySoundEffect "Button3" If ReadyToLand1 Then cmdLandShip1_Click End If If ReadyToLand2 Then cmdLandShip2_Click End If 'bring up the message console form frmConfigure.Show Modal 'turn off scanner If ScannerOn Then cmdScan_Click ScannerOn = False cmdScan.Enabled = False End If End Select End Sub Private Sub Form_Load() 'test 'Player(Current).NumResources = 666 'Planet(8).Owner = Current 'Planet(8).Sabotaged = True 'Planet(8).SabotageReduction = 0 'Player(Other).NumPlanets = 10 'Player(Other).WasBig = True 'refresh this variable NumPlanetsCaptured = 0 'for messages to players in frmAnnounce 'to set a random 3rd line Dim alternate1 As String Dim alternate2 As String Dim alternate3 As String Dim choice As Integer Me.WindowState = DefaultGameSize SetAppHelp (Me.hWnd) 'register help file with win engine Call DisableX(Me) 'disable the X button on the control box 'turn off the planets that aren't in play 'due to galaxy size Select Case GalaxySize Case 30 '20 planets turned off picPlanet(2).Visible = False picPlanet(5).Visible = False picPlanet(7).Visible = False picPlanet(10).Visible = False picPlanet(12).Visible = False picPlanet(14).Visible = False picPlanet(16).Visible = False picPlanet(19).Visible = False picPlanet(21).Visible = False picPlanet(22).Visible = False picPlanet(26).Visible = False picPlanet(28).Visible = False picPlanet(31).Visible = False picPlanet(33).Visible = False picPlanet(34).Visible = False picPlanet(37).Visible = False picPlanet(38).Visible = False picPlanet(43).Visible = False picPlanet(45).Visible = False picPlanet(46).Visible = False picPlanet(49).Visible = False 'adjust location of some planets, to even them out picPlanet(0).Top = 600 picPlanet(0).Left = 300 picPlanet(9).Top = 400 picPlanet(9).Left = 5200 Case 40 '10 planets turned off picPlanet(4).Visible = False picPlanet(11).Visible = False picPlanet(16).Visible = False picPlanet(20).Visible = False picPlanet(22).Visible = False picPlanet(28).Visible = False 'picPlanet(31).Visible = False picPlanet(35).Visible = False picPlanet(37).Visible = False picPlanet(39).Visible = False picPlanet(44).Visible = False End Select 'to trap the function keys: KeyPreview = True 'reset justlanded to false - not necessary, but just in case... Dim v For v = 0 To 49 Planet(v).JustLanded = False Next v DrawGalaxy 'set the form caption with current player's number 'and set player's name in name box Personalize 'print message in message box If IncomingMessage = "" Then txtMessages.FontBold = False txtMessages.ForeColor = vbGreen txtMessages.Text = "No Messages at this time" txtMessages.ForeColor = vbYellow txtMessages.FontBold = True txtMessages.Text = "Incoming Message..." frmMessageConsole.txtMessageBox.Text = IncomingMessage 'Beep End If 'fill in turn number box txtTurnNumber.Text = "Turn " & Str(TurnNumber) '******BioRocket******* '** I moved the part that checks for contaminated planets & calls BioDamage procedure '** to the form_activate event - seems to work, showing msgbox on top of gamescreen '** instead of on space background...with flag to only show it once/turn Dim X As Integer 'see if biohazard rockets landed For X = 0 To 49 If Planet(X).BioRocketETA = TurnNumber Then Detonation (X) End If Next X '********End BioRocket********* '******Aliens******** CheckForAliens 'update troops on alien planets UpdateAliens 'check for expansion to neutral planets AlienExpansion '******************** 'Update players resources UpdateResources 'fill in planet, troop and resources text boxes UpdatePlayerStats 'initialize the colours for the status text box Dim yellow, red, Green yellow = &HFFFF& 'for player 1 red = &HFF& 'for player 2 Green = &HFF00& 'for neutral 'enable the landing frame if either ship is in warp If Player(Current).Ship(0).Launched Or Player(Current).Ship(1).Launched Then fraLanding.Enabled = True End If 'enable the landing buttons if ships are launched If Player(Current).Ship(0).Launched Then cmdLandShip1.Enabled = True End If If Player(Current).Ship(1).Launched Then cmdLandShip2.Enabled = True End If '******************************************** '***********MULTI-TURN RESEARCH************** If Player(Current).MechResearchDone = TurnNumber Then 'MsgBox "Turnnumber=" + Str(TurnNumber) + "player(current).mechresearchdone=" + Str(Player(Current).MechResearchDone) TechLevel = 1 'techlevel set in module declare.bas Player(Current).MechResearched = True frmTechDone.Show Modal End If If Player(Current).ShieldResearchDone = TurnNumber Then TechLevel = 2 Player(Current).ShieldResearched = True frmTechDone.Show Modal End If If Player(Current).ResourceResearchDone = TurnNumber Then TechLevel = 3 Player(Current).ResourcesResearched = True frmTechDone.Show Modal End If If Player(Current).ScannerResearchDone = TurnNumber Then TechLevel = 5 Player(Current).ScannerResearched = True frmTechDone.Show Modal End If If Player(Current).BigShipResearchDone = TurnNumber Then TechLevel = 6 Player(Current).BigShipResearched = True frmTechDone.Show Modal End If If Player(Current).UltraWarpResearchDone = TurnNumber Then TechLevel = 7 Player(Current).UltraWarpResearched = True frmTechDone.Show Modal End If If Player(Current).DeepScannerResearchDone = TurnNumber Then TechLevel = 8 Player(Current).DeepScannerResearched = True frmTechDone.Show Modal End If If Player(Current).JammerResearchDone = TurnNumber Then TechLevel = 9 Player(Current).JammerResearched = True frmTechDone.Show Modal End If If Player(Current).CloakingResearchDone = TurnNumber Then TechLevel = 10 Player(Current).CloakingResearched = True frmTechDone.Show Modal End If If Player(Current).Missile1ResearchDone = TurnNumber Then TechLevel = 11 Player(Current).Missile1Researched = True frmTechDone.Show Modal End If If Player(Current).Missile2ResearchDone = TurnNumber Then TechLevel = 12 Player(Current).Missile2Researched = True frmTechDone.Show Modal End If If Player(Current).LaserResearchDone = TurnNumber Then TechLevel = 13 Player(Current).LaserResearched = True 'recalculate all player's planet's combatstrengths 'but not the troops on ships... Dim Q For Q = 0 To 49 If Planet(Q).Owner = Current Then SetCombatStrength (Q) End If Next Q frmTechDone.Show Modal End If If Player(Current).PlasmaResearchDone = TurnNumber Then TechLevel = 14 Player(Current).PlasmaResearched = True 'reset CS for all troops - except those on ships For Q = 0 To 49 If Planet(Q).Owner = Current Then SetCombatStrength (Q) End If Next Q frmTechDone.Show Modal End If If Player(Current).BioRocketResearchDone = TurnNumber Then TechLevel = 15 Player(Current).BioRocketResearched = True frmTechDone.Show Modal End If If Player(Current).LongBioResearchDone = TurnNumber Then TechLevel = 16 Player(Current).LongBioResearched = True frmTechDone.Show Modal End If If Player(Current).ShipShield1ResearchDone = TurnNumber Then TechLevel = 17 Player(Current).ShipShield1Researched = True frmTechDone.Show Modal End If If Player(Current).ShipShield2ResearchDone = TurnNumber Then TechLevel = 18 Player(Current).ShipShield2Researched = True frmTechDone.Show Modal End If If Player(Current).BioCleanupResearchDone = TurnNumber Then TechLevel = 19 Player(Current).BioCleanupResearched = True frmTechDone.Show Modal End If If Player(Current).RegenerationResearchDone = TurnNumber Then TechLevel = 20 Player(Current).RegenerationResearched = True frmTechDone.Show Modal End If If Player(Current).WarpScannerResearchDone = TurnNumber Then TechLevel = 21 Player(Current).WarpScannerResearched = True frmTechDone.Show Modal End If '********************************** '******ANNOUNCEMENTS*********** 'warn player when enemy has more than 10 planets If Player(Other).NumPlanets > 9 And Player(Current).Message1Given = False Then MessageType = "Expanding" Announceline1 = "Reports Show " + Player(Other).Name + "'s Reach" Announceline2 = "Has Extended Across" + Str(Player(Other).NumPlanets) + " Systems." Announceline3 = "" frmAnnounce.Show Modal Player(Current).Message1Given = True End If 'second warning when more than 20 planets If Player(Other).NumPlanets > 19 And Player(Current).Message2Given = False Then MessageType = "Expanding" Announceline1 = Player(Other).Name + "'s Empire Now Spans" + Str(Player(Other).NumPlanets) + " Systems." Announceline2 = "Your People Demand Action!" Announceline3 = "" frmAnnounce.Show Modal Player(Current).Message2Given = True Player(Other).WasBig = True End If 'message if enemy's empire is shrinking If Player(Other).NumPlanets < 12 And Player(Other).WasBig Then MessageType = "Expanding" Announceline1 = Player(Other).Name + "'s Empire is Crumbling -" Announceline2 = "Fewer Than 15 Systems Remain..." Announceline3 = "Victory Is At Hand!" frmAnnounce.Show Modal Player(Other).WasBig = False End If 'message if planet captured by opponent For X = 0 To 49 If Planet(X).Owner = Other And Planet(X).Captured = True Then 'tell player which planet is lost MessageType = "Captured" Announceline1 = Player(Other).Name + " has triumphed over our forces" Announceline2 = "stationed on " + Planet(X).Name + " ---" '***set a random third line Randomize choice = Int(Rnd * 3) + 1 alternate1 = "We must avenge them!" alternate2 = "This humiliation cannot be accepted..." alternate3 = "We must reclaim this world for the Empire!" Select Case choice Case 1 Announceline3 = alternate1 Case 2 Announceline3 = alternate2 Case 3 Announceline3 = alternate3 End Select frmAnnounce.Show Modal 'reset captured variable Planet(X).Captured = False End If Next X 'message that other player's invasion failed For X = 0 To 49 If Planet(X).Owner = Current And Planet(X).FailedInvasion = True Then MessageType = "Failed Invasion" '***set a random FIRST line Randomize choice = Int(Rnd * 3) + 1 alternate1 = "Our Forces on " + Planet(X).Name + " have stopped an invasion!" alternate2 = Planet(X).Name + " reports a failed invasion!" alternate3 = Player(Other).Name + " was turned back at " + Planet(X).Name + "!" Select Case choice Case 1 Announceline1 = alternate1 Case 2 Announceline1 = alternate2 Case 3 Announceline1 = alternate3 End Select 'Announceline1 = "Our Forces on " + Planet(X).Name + " have repelled an invasion!" Announceline2 = "Troop Losses: " + Str(Planet(X).FailedInvasionTroopLosses) If Player(Current).MechResearched = True Then Announceline3 = "Mech Losses: " + Str(Planet(X).FailedInvasionMechLosses) Else Announceline3 = "" End If frmAnnounce.Show Modal 'reset values to prevent repeat messages Planet(X).FailedInvasion = False Planet(X).FailedInvasionTroopLosses = 0 Planet(X).FailedInvasionMechLosses = 0 End If Next X 'message if biorocket did not detonate - warn player that enemy tried 'to use biorocket on them... For X = 0 To 49 If Planet(X).Owner = Current And Planet(X).BioFailed Then 'warn player that enemy tried to use biorocket MessageType = "BioFailed" Announceline1 = "Leaders on " + Planet(X).Name + " confirm the destruction" Announceline2 = "of an incoming BioChemical Rocket" '***set a random third line Randomize choice = Int(Rnd * 3) + 1 alternate1 = "A catastrophe has been narrowly avoided!" alternate2 = "A swift reprisal is demanded!" alternate3 = "The planet is saved!" Select Case choice Case 1 Announceline3 = alternate1 Case 2 Announceline3 = alternate2 Case 3 Announceline3 = alternate3 End Select frmAnnounce.Show Modal 'reset biofailure stuff to avoid repeat messages Planet(X).BioFailed = False End If Next X 'Message if planet was sabotaged - successful or not For X = 0 To 49 If Planet(X).Owner = Current And Planet(X).Sabotaged Then 'MessageType = "Sabotage" If Planet(X).SabotageReduction = 0 Then 'mission was a FAILURE MessageType = "Sabotage Failed" '**this should be in frmAnnounce as well, not just a msgbox... Announceline1 = "Reports from " + Planet(X).Name + " confirm that enemy" Announceline2 = "forces tried to sabotage its resource production --" Announceline3 = "The cowards were destroyed!" frmAnnounce.Show Modal 'Dim msg1 As String 'Dim msg2 As String 'Dim msg3 As String 'msg1 = "Reports from " + Planet(X).Name + " confirm that enemy" 'msg2 = "forces tried to sabotage its resource production --" 'msg3 = "The cowards were destroyed!" 'PlaySoundEffect "Warning" 'MsgBox msg1 + Chr(13) + msg2 + Chr(13) + msg3, vbExclamation, "Sabotage Alert!" 'don't repeat this message every turn!!! Planet(X).Sabotaged = False Planet(X).SabotageReduction = 0 Planet(X).SabotagedFactory = False ElseIf Planet(X).SabotageReduction > 0 Or Planet(X).SabotageReduction = -1 Then 'NOTE: variable can be -1 if the planet already had 0 resources when sabotaged... 'mission was a SUCCESS MessageType = "Sabotage" Announceline1 = "Reports from " + Planet(X).Name + " confirm that saboteurs" If Planet(X).SabotagedFactory Then Announceline2 = "have destroyed their resource production!" Else Announceline2 = "have breached the security perimeter!" End If Announceline3 = "Resource production reduced to " + Str(Planet(X).Resources) frmAnnounce.Show Modal 'reset sabotage attributes, to avoid the message coming up every turn 'and to allow the planet to be sabotaged again... Planet(X).Sabotaged = False Planet(X).SabotageReduction = 0 Planet(X).SabotagedFactory = False 'ElseIf Planet(X).SabotageReduction = -1 Then 'do nothing - sabotaged a planet already at 0 resources 'reset sabotage attributes, to avoid the message coming up every turn 'and to allow the planet to be sabotaged again... ' Planet(X).Sabotaged = False ' Planet(X).SabotageReduction = 0 ' Planet(X).SabotagedFactory = False End If End If Next X End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) txtStatus.ForeColor = vbGreen txtStatus.Text = "" End Sub Private Sub Form_Resize() RefreshWarpPath End Sub Private Sub fraEnemyWarpPath_DragDrop(Source As Control, X As Single, Y As Single) txtStatus.ForeColor = vbGreen End Sub Private Sub fraLanding_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) txtStatus.Text = "" End Sub Private Sub fraOptions_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) txtStatus.Text = "" txtStatus.ForeColor = vbGreen End Sub Private Sub fraPlayerStats_DragDrop(Source As Control, X As Single, Y As Single) txtStatus.ForeColor = vbGreen txtStatus.Text = "Player Stats" End Sub Private Sub fraTactical_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) txtStatus.Text = "" End Sub Private Sub fraUpgrade_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) txtStatus.ForeColor = vbGreen txtStatus.Text = "" End Sub Private Sub fraWarpPath_DragDrop(Source As Control, X As Single, Y As Single) txtStatus.ForeColor = vbGreen End Sub Private Sub fraWarpPath_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) txtStatus.Text = "" End Sub Private Sub hsbQuantity_Change() 'update the quantity label and projected cost lblQuantity.Caption = Str(hsbQuantity.Value) Quantity = hsbQuantity.Value PurchasePrice = Quantity * UnitCost txtTotal.Text = Str(PurchasePrice) End Sub Private Sub hsbQuantity_Scroll() 'update the quantity label and projected cost lblQuantity.Caption = Str(hsbQuantity.Value) Quantity = hsbQuantity.Value PurchasePrice = Quantity * UnitCost txtTotal.Text = Str(PurchasePrice) End Sub Private Sub lblTitle_DblClick() 'runs code under lblTitle2 lblTitle2_DblClick End Sub Private Sub lblTitle2_DblClick() 'displays the About box Dim Msg As String Dim title, dialogtype dialogtype = vbOKOnly + vbInformation title = "About 4000 A.D." Msg = "4000 A.D. - version 2.5 " + Chr(13) Msg = Msg + "c. 1997-1999 Gordon Stewart - All Rights Reserved " + Chr(13) + Chr(13) Msg = Msg + "Visit 4000 A.D. on the internet at:" + Chr(13) Msg = Msg + "http://www.interlog.com/~gordons/4000ad.html" + Chr(13) + Chr(13) Msg = Msg + "Free source code now available" PlaySoundEffect "Quiet" MsgBox Msg, dialogtype, title End Sub Private Sub picGalaxy_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) txtStatus.Text = "" End Sub Private Sub picPlanet_Click(Index As Integer) 'match the right ship number - with activeship Dim CurrentPlayer, Enemy CurrentPlayer = Current Enemy = Other Dim RandomLosses 'for calculating losses in battles... 'placeholders for troop numbers Dim a, b a = Player(Current).Ship(activeship).Troops b = Player(Current).Ship(activeship).AssaultTroops '****biorocket 'this bit seems to fix a problem with clicking your other planets If Planet(Index).LaunchSite = False And Planet(Index).InBioRange = False And BioRocketOn Then EraseLines End If If Planet(Index).InBioRange And BioRocketOn Then PlaySoundEffect "Button2" If MsgBox("Target this planet?", vbYesNo + vbQuestion, "BioHazard Launch") = vbYes Then If Planet(Index).BioRocketETA > 0 Then PlaySoundEffect "Quiet" MsgBox "This planet has already been targeted", , "BioHazard Launch Aborted" 'erase lines and exit sub EraseLines 'erase circles if necessary If ReadyToLand1 Or ReadyToLand2 Then EraseCircles End If Else 'if planet inbiorange, and not targeted previously... TargetBioRocket (Index) End If Else 'erase lines and exit sub EraseLines 'erase circles if necessary If ReadyToLand1 Or ReadyToLand2 Then EraseCircles End If End If Exit Sub End If '**end biorocket If (ReadyToLand1 = True Or ReadyToLand2 = True) And Planet(Index).InRange And Player(Current).Ship(activeship).Launched Then PlaySoundEffect "Quiet" If MsgBox("Do you want to land here?", vbYesNo + vbQuestion, "Landing") = vbYes Then 'get rid of the circles EraseCircles '*****SABOTAGE***** If Player(Current).Ship(activeship).Sabotage Then 'goto sabotage routine Call SabotageLanding(Index, activeship) ReInitializeShip (activeship) Exit Sub End If '****END OF SABOTAGE ***** 'select type of landing - friendly, neutral or attack Select Case Planet(Index).Owner Case CurrentPlayer 'landing on planet player owns PlaySoundEffect "Quiet" MsgBox "Landing successful", , " " 'update planet, ship stats, player stats UpdateNumPlanets UpdatePlayerStats 'disable the landing button and remove from warp path If activeship = 0 Then cmdLandShip1.Enabled = False 'get rid of the ship picture picPlayerPath(Player(Current).Ship(activeship).WarpPosition - 1).Picture = LoadPicture() End If If activeship = 1 Then cmdLandShip2.Enabled = False 'get rid of the ship picture picPlayerPath(Player(Current).Ship(activeship).WarpPosition - 1).Picture = LoadPicture() End If 'set ship values to unlaunched and empty ReInitializeShip (activeship) RefreshWarpPath 'add the players stuff to the planet Planet(Index).Troops = Planet(Index).Troops + a Planet(Index).AssaultTroops = Planet(Index).AssaultTroops + b SetCombatStrength (Index) 'set ship values to unlaunched and empty ReInitializeShip (activeship) 'clear the management frame ClearFrame cmdPreviewShip1.Enabled = True cmdPreviewShip2.Enabled = True cmdPreviewEnemy1.Enabled = True cmdPreviewEnemy2.Enabled = True Case Enemy 'landing on other player's planet PlaySoundEffect "Attack" Randomize 'set placeholder for current player's combat strength AttackStrength = Player(Current).Ship(activeship).CombatStrength DefenceStrength = Planet(Index).CombatStrength 'set placeholders for troops on the planet Dim c, d c = Planet(Index).Troops d = Planet(Index).AssaultTroops 'compare the strengths If AttackStrength > DefenceStrength Then 'ATTACKER WINS NumPlanetsCaptured = NumPlanetsCaptured + 1 Planet(Index).Captured = True 'don't allow player to launch from this planet this turn Planet(Index).JustLanded = True 'winner loses % of troops based on defensive CS 'initial value TroopLosses = 0 If a > 0 And DefenceStrength > 0 Then Select Case DefenceStrength Case 0 'no losses TroopLosses = 0 Case 1 To 2 '0-10% losses TroopLosses = Int(Rnd * 10) Case 3 To 4 '5-15% losses TroopLosses = Int(Rnd * 10) + 5 Case 5 To 7 '10-20% TroopLosses = Int(Rnd * 10) + 10 Case 8 To 10 '15-25% TroopLosses = Int(Rnd * 10) + 15 Case 11 To 15 '15-30% TroopLosses = Int(Rnd * 15) + 15 Case 16 To 200 '20-35% TroopLosses = Int(Rnd * 15) + 20 Case Else '20-45% TroopLosses = Int(Rnd * 25) + 20 End Select a = a - (a * (TroopLosses / 100)) Debug.Print "**Troop Losses = " & Str(TroopLosses) & "%" End If 'winner loses % of assault troops 'initial value AssaultLosses = 0 If b > 0 And DefenceStrength > 0 Then Select Case DefenceStrength Case 0 '0% losses AssaultLosses = 0 Case 1 To 3 '0-10% AssaultLosses = Int(Rnd * 10) Case 4 To 7 '0-15% AssaultLosses = Int(Rnd * 15) Case 8 To 12 '5-15% AssaultLosses = Int(Rnd * 10) + 5 Case 13 To 17 '10-20% AssaultLosses = Int(Rnd * 10) + 10 Case 18 To 250 '15-25% AssaultLosses = Int(Rnd * 10) + 15 Case Else '15-35% AssaultLosses = Int(Rnd * 20) + 15 End Select b = b - (b * (AssaultLosses / 100)) End If 'planet troops, combatstrength changes Planet(Index).Troops = a Planet(Index).AssaultTroops = b 'update other player's stats with c & d (above) Player(Other).NumTroops = Player(Other).NumTroops - Planet(Index).Troops Player(Other).NumAssaultTroops = Player(Other).NumAssaultTroops - d Player(Other).NumPlanets = Player(Other).NumPlanets - 1 'set this variable for frmlandscape: ActivePlanet = Index 'show the results of the battle 'owner of planet not changed yet, to show results of battle - see right below frmLandscape.Show Modal 'planet changes owners Planet(Index).Owner = Current 'set planet's combat strength SetCombatStrength (Index) 'update player: resources, numplanets UpdateNumPlanets UpdatePlayerStats 'clear the management frame ClearFrame cmdPreviewShip1.Enabled = True cmdPreviewShip2.Enabled = True cmdPreviewEnemy1.Enabled = True cmdPreviewEnemy2.Enabled = True '************************************ ElseIf AttackStrength <= Planet(Index).CombatStrength Then 'DEFENDER WINS, and tie goes to the defender 'notify other player next turn Planet(Index).FailedInvasion = True 'lose all your troops Player(Current).NumTroops = Player(Current).NumTroops - a Player(Current).NumAssaultTroops = Player(Current).NumAssaultTroops - b If Planet(Index).Troops > 0 Then 'defender wins, but loses % of troops based on attacker's CS 'initial value TroopLosses = 0 Select Case AttackStrength Case 0 'no losses TroopLosses = 0 Case 1 To 2 '0-10% losses TroopLosses = Int(Rnd * 10) Case 3 To 4 '0-15% losses TroopLosses = Int(Rnd * 15) Case 5 To 8 '5-15% TroopLosses = Int(Rnd * 10) + 5 Case 9 To 12 '10-20% TroopLosses = Int(Rnd * 10) + 10 Case 13 To 15 '10-30% TroopLosses = Int(Rnd * 20) + 10 Case 16 To 20 '15-35% TroopLosses = Int(Rnd * 20) + 15 Case 21 To 25 '15-40% TroopLosses = Int(Rnd * 25) + 15 Case 26 To 35 '20-45% TroopLosses = Int(Rnd * 25) + 20 Case 36 To 45 '25-40% TroopLosses = Int(Rnd * 15) + 25 Case Else '25-50% TroopLosses = Int(Rnd * 25) + 25 End Select 'for next turn's notification of failed invasion Planet(Index).FailedInvasionTroopLosses = Int(c * (TroopLosses / 100)) c = c - (c * (TroopLosses / 100)) Planet(Index).Troops = c End If If Planet(Index).AssaultTroops > 0 Then 'defender/winner loses % of assault troops 'initial value 0 AssaultLosses = 0 Select Case AttackStrength Case 0 To 5 '0% losses AssaultLosses = 0 Case 6 To 10 '0-10% AssaultLosses = Int(Rnd * 10) Debug.Print "Arrgh! Attackstrength:" + Str(AttackStrength), "Assaultlosses:" + Str(AssaultLosses) Case 11 To 15 '0-15% AssaultLosses = Int(Rnd * 15) Case 16 To 25 '5-20% AssaultLosses = Int(Rnd * 15) + 5 Case 26 To 40 '10-20% AssaultLosses = Int(Rnd * 10) + 10 Case 41 To 60 '15-30% AssaultLosses = Int(Rnd * 15) + 15 Case 61 To 80 '20-35% AssaultLosses = Int(Rnd * 15) + 20 Case Else '20-40% AssaultLosses = Int(Rnd * 20) + 20 End Select Planet(Index).FailedInvasionMechLosses = Int(d * (AssaultLosses / 100)) d = d - (d * (AssaultLosses / 100)) Planet(Index).AssaultTroops = d End If 'update planet's combat strength SetCombatStrength (Index) UpdateNumPlanets UpdatePlayerStats 'clear management frame ClearFrame cmdPreviewShip1.Enabled = True cmdPreviewShip2.Enabled = True cmdPreviewEnemy1.Enabled = True cmdPreviewEnemy2.Enabled = True 'set this variable for frmlandscape: ActivePlanet = Index 'show the results of the battle frmLandscape.Show Modal End If 'disable the landing button and remove from warp path If activeship = 0 Then cmdLandShip1.Enabled = False 'get rid of the ship picture picPlayerPath(Player(Current).Ship(activeship).WarpPosition - 1).Picture = LoadPicture() ElseIf activeship = 1 Then cmdLandShip2.Enabled = False 'get rid of the ship picture picPlayerPath(Player(Current).Ship(activeship).WarpPosition - 1).Picture = LoadPicture() End If 'set ship values to unlaunched and empty ReInitializeShip (activeship) RefreshWarpPath Case 2 'landing on UNOWNED planet PlaySoundEffect "Quiet" MsgBox "A new planet for you!", , " " Planet(Index).Owner = Current Planet(Index).JustLanded = True 'so you can't take off again this turn 'add the players stuff to the planet Planet(Index).Troops = a Planet(Index).AssaultTroops = b SetCombatStrength (Index) 'update player: resources, numplanets UpdateNumPlanets UpdatePlayerStats 'clear management frame ClearFrame cmdPreviewShip1.Enabled = True cmdPreviewShip2.Enabled = True cmdPreviewEnemy1.Enabled = True cmdPreviewEnemy2.Enabled = True 'deal with the landing button and warp path picture If activeship = 0 Then cmdLandShip1.Enabled = False 'get rid of the ship picture picPlayerPath(Player(Current).Ship(activeship).WarpPosition - 1).Picture = LoadPicture() ElseIf activeship = 1 Then cmdLandShip2.Enabled = False 'get rid of the ship picture picPlayerPath(Player(Current).Ship(activeship).WarpPosition - 1).Picture = LoadPicture() End If 'set ship values to unlaunched and empty ReInitializeShip (activeship) RefreshWarpPath 'show the landscape screen with troop stats ActivePlanet = Index frmLandscape.Show Modal Case 3 AttackAliens (Index) End Select Else 'answered NO to msgbox - turn off circles, set rtl false EraseCircles ReadyToLand1 = False ReadyToLand2 = False cmdPreviewShip1.Enabled = True cmdPreviewShip2.Enabled = True cmdPreviewEnemy1.Enabled = True cmdPreviewEnemy2.Enabled = True If Player(Current).Ship(0).Launched Then cmdLandShip1.Enabled = True End If If Player(Current).Ship(1).Launched Then cmdLandShip2.Enabled = True End If Exit Sub End If 'quit without showing "Hey! Not your planet box" Exit Sub End If '****************************** '*****Planet Management******** '****************************** If Planet(Index).Owner = Current Then On Error Resume Next PlaySoundEffect "Ambient3" 'PlayRandomSound On Error GoTo 0 'clear frame first ClearFrame 'enable the management box and the ship box fraUpgrade.Enabled = True cmdOK.Enabled = True hsbQuantity.Enabled = False txtTotal.Text = "" fraLanding.Enabled = True fraTactical.Enabled = True 'show what planet is active, set it to active ActivePlanet = Index cmdPlanetName.Caption = Planet(Index).Name '********turn on buttons as available: 'launch button enabled if at least one ship available If Player(Current).Ship(0).Launched And Player(Current).Ship(1).Launched Then cmdLaunch.Enabled = False Else cmdLaunch.Enabled = True End If 'scanner button enabled if planet has a scanner If Planet(Index).HaveScanner Then cmdScan.Enabled = True ElseIf Planet(Index).HaveScanner = False Then cmdScan.Enabled = False End If 'RepairIndustry button enabled if planet is damaged If Planet(Index).Damaged Then cmdRepairIndustry.Enabled = True End If 'Biohazard button enabled if tech researched If Player(Current).BioRocketResearched Then cmdLaunchBioRocket.Enabled = True End If 'regenerate button enabled if tech researched and if needed If Player(Current).RegenerationResearched And Planet(Index).NukedResources Then cmdRegenerate.Enabled = True End If 'detoxify button enabled if tech researched and if needed If Player(Current).BioCleanupResearched And Planet(Index).Contaminated Then cmdCleanup.Enabled = True End If Else 'planet not owned by current player PlaySoundEffect "Access" MsgBox "Hey! Not your planet", vbOKOnly + vbExclamation, "Access Denied" 'disable mgmt frame, erase circles, set rtl to false ClearFrame 'should only erase circles if part of a landing scenario... If ReadyToLand1 = True Or ReadyToLand2 = True Then EraseCircles ReadyToLand1 = False ReadyToLand2 = False End If 'clear the board of any inrange scanner settings Dim z As Integer For z = 0 To 49 Planet(z).InScannerRange = False Next z Dim Count For Count = 0 To 49 If Planet(Count).LaunchSite = True Then EraseLines End If Next Count cmdPreviewShip1.Enabled = True cmdPreviewShip2.Enabled = True cmdPreviewEnemy1.Enabled = True cmdPreviewEnemy2.Enabled = True If Player(Current).Ship(0).Launched Then cmdLandShip1.Enabled = True End If If Player(Current).Ship(1).Launched Then cmdLandShip2.Enabled = True End If End If End Sub Private Sub picPlanet_DblClick(Index As Integer) 'go to planet view screen cmdPlanetName_Click End Sub Private Sub picPlanet_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) 'public const neutral and alien in .bas module 'Neutral = 2 'Alien = 3 If ScannerOn Then 'show full stats if in range If Planet(Index).Owner = Current Then txtStatus.ForeColor = vbYellow 'show full stats txtStatus.Text = Planet(Index).Name & ": Resources:" & Planet(Index).Resources & " Troops:" & Planet(Index).Troops _ & " Mechs: " & Planet(Index).AssaultTroops & _ " CS:" & Planet(Index).CombatStrength ElseIf Planet(Index).Owner = Neutral Then 'show basic stats in green txtStatus.ForeColor = vbGreen txtStatus.Text = Planet(Index).Name & ": Resources:" & Planet(Index).Resources ElseIf Planet(Index).Owner = Alien And Planet(Index).InScannerRange Then 'show full stats in blue txtStatus.ForeColor = vbBlue txtStatus.Text = Planet(Index).Name & ": Resources:" & Planet(Index).Resources & " Troops:" & Planet(Index).Troops _ & " Mechs:" & Planet(Index).AssaultTroops & _ " CS:" & Planet(Index).CombatStrength ElseIf Planet(Index).Owner = Other And Planet(Index).InScannerRange Then 'show full stats in red txtStatus.ForeColor = vbRed txtStatus.Text = Planet(Index).Name & ": Resources:" & Planet(Index).Resources & " Troops:" & Planet(Index).Troops _ & " Mechs:" & Planet(Index).AssaultTroops & _ " CS:" & Planet(Index).CombatStrength ElseIf Planet(Index).Owner = Alien Then 'show basic stats in blue txtStatus.ForeColor = vbBlue txtStatus.Text = Planet(Index).Name & ": Resources:" & Planet(Index).Resources ElseIf Planet(Index).Owner = Other Then 'show basic stats in red txtStatus.ForeColor = vbRed txtStatus.Text = Planet(Index).Name & ": Resources:" & Planet(Index).Resources End If ElseIf ScannerOn = False Then 'full stats for owned planets, basic for everything else Select Case Planet(Index).Owner Case Current txtStatus.ForeColor = vbYellow 'show full stats txtStatus.Text = Planet(Index).Name & ": Resources:" & Planet(Index).Resources & " Troops:" & Planet(Index).Troops _ & " Mechs:" & Planet(Index).AssaultTroops & _ " CS:" & Planet(Index).CombatStrength Case Neutral 'show basic stats in green txtStatus.ForeColor = vbGreen txtStatus.Text = Planet(Index).Name & ": Resources:" & Planet(Index).Resources Case Alien 'show full stats in blue txtStatus.ForeColor = vbBlue txtStatus.Text = Planet(Index).Name & ": Resources:" & Planet(Index).Resources Case Other 'show full stats in red txtStatus.ForeColor = vbRed txtStatus.Text = Planet(Index).Name & ": Resources:" & Planet(Index).Resources End Select End If End Sub Private Sub picUpgrade_DblClick(Index As Integer) 'turn off scanner if it's on If ScannerOn Then cmdScan_Click ScannerOn = False End If 'start buying procedure 'see what is being bought/researched txtStatus.ForeColor = vbGreen Select Case Index Case 0 'missile defences for planet 'fixed price of 10/planet '***moving Unitcost into the 'if tech researched' part 'UnitCost = 10 'exit sub if planet already has missiles If Planet(ActivePlanet).HaveMissiles Then PlaySoundEffect "Quiet" MsgBox "This planet is already equipped with missiles", vbInformation, "Transaction Cancelled" Exit Sub End If 'check if technology researched If Player(Current).Missile1Researched Then 'check if enough money! UnitCost = 10 If Player(Current).NumResources >= UnitCost Then 'first, enable the scrollbar hsbQuantity.Enabled = True hsbQuantity.Value = 0 lblItemName = "Missile Defences" lblQuantity = Str(hsbQuantity.Value) txtTotal.Text = Str(hsbQuantity.Value) 'get max value for scroll bar hsbQuantity.Max = 1 Else PlaySoundEffect "Quiet" MsgBox "Insufficient resources", vbExclamation, "Transaction Denied" End If Else PlaySoundEffect "Quiet" MsgBox "You do not have this technology", vbExclamation, "Access Denied" End If Case 1 'Planetary shield - fixed cost/planet '****testing moving this into 'if tech researched' 'UnitCost = 15 'exit sub if planet already has a shield If Planet(ActivePlanet).HaveShields Then PlaySoundEffect "Quiet" MsgBox "This planet is already protected by a planetary shield", vbInformation, "Transaction Cancelled" Exit Sub End If If Player(Current).ShieldResearched Then 'check if enough money! UnitCost = 15 If Player(Current).NumResources >= UnitCost Then 'enable the scrollbar hsbQuantity.Enabled = True hsbQuantity.Value = 0 lblItemName = "Planetary Shield" lblQuantity = Str(hsbQuantity.Value) txtTotal.Text = Str(hsbQuantity.Value) 'get max value for scroll bar hsbQuantity.Max = 1 Else PlaySoundEffect "Quiet" MsgBox "Insufficient resources", vbExclamation, "Transaction Denied" End If Else PlaySoundEffect "Quiet" MsgBox "You do not have this technology", vbExclamation, "Access Denied" End If Case 2 'improved resource production - fixed cost/planet 'unitcost moved into 'if tech researched' part 'UnitCost = 15 'check for resources already high enough - ie 5 If Planet(ActivePlanet).ImprovedResources Or Planet(ActivePlanet).Resources > 5 Then PlaySoundEffect "Quiet" MsgBox "This planet has already maximized its production capacity", vbInformation, "Transaction Cancelled" Exit Sub End If 'check if player has researched this item If Player(Current).ResourcesResearched Then 'check if enough money! UnitCost = 15 If Player(Current).NumResources >= UnitCost Then 'first, enable the scrollbar hsbQuantity.Enabled = True hsbQuantity.Value = 0 lblItemName = "Improved Resource Production" lblQuantity = Str(hsbQuantity.Value) txtTotal.Text = Str(hsbQuantity.Value) 'get max value for scroll bar hsbQuantity.Max = 1 Else PlaySoundEffect "Quiet" MsgBox "Insufficient resources", vbExclamation, "Transaction Denied" End If Else PlaySoundEffect "Quiet" MsgBox "You do not have this technology", vbExclamation, "Access Denied" End If Case 3 'regular troops UnitCost = 1 'check if enough money! If Player(Current).NumResources >= UnitCost Then 'first, enable the scrollbar hsbQuantity.Enabled = True hsbQuantity.Value = 0 lblItemName = "Troops" lblQuantity = Str(hsbQuantity.Value) txtTotal.Text = Str(hsbQuantity.Value) 'get max value for scroll bar hsbQuantity.Max = Int(Player(Current).NumResources / UnitCost) Else PlaySoundEffect "Quiet" MsgBox "Insufficient resources", vbExclamation, "Transaction Denied" End If Case 4 'buying assault troops 'UnitCost = 4 'check if player has researched this item If Player(Current).MechResearched Then UnitCost = 4 'check if enough money If Player(Current).NumResources >= UnitCost Then 'enable the scrollbar hsbQuantity.Enabled = True hsbQuantity.Value = 0 lblItemName = "Assault Mechs" lblQuantity = Str(hsbQuantity.Value) txtTotal.Text = Str(hsbQuantity.Value) 'get max value for scroll bar hsbQuantity.Max = Int(Player(Current).NumResources / UnitCost) Else PlaySoundEffect "Quiet" MsgBox "Insufficient resources", vbExclamation, "Transaction Denied" End If Else PlaySoundEffect "Quiet" MsgBox "You do not have this technology", vbExclamation, "Access Denied" End If Case 5 'here is where I load a tech research form 'with buttons for assault troops, ship tech, resource tech, and planet defenses frmResearch.Show Modal Case 6 'scanners 'UnitCost = 25 'exit sub if planet already has a shield If Planet(ActivePlanet).HaveScanner Then PlaySoundEffect "Quiet" MsgBox "This planet already has a scanner", vbInformation, "Transaction Cancelled" Exit Sub End If If Player(Current).ScannerResearched Then UnitCost = 25 'check if enough money! If Player(Current).NumResources >= UnitCost Then 'enable the scrollbar hsbQuantity.Enabled = True hsbQuantity.Value = 0 lblItemName = "Scanner" lblQuantity = Str(hsbQuantity.Value) txtTotal.Text = Str(hsbQuantity.Value) 'get max value for scroll bar hsbQuantity.Max = 1 Else PlaySoundEffect "Quiet" MsgBox "Insufficient resources", vbExclamation, "Transaction Denied" End If Else PlaySoundEffect "Quiet" MsgBox "You do not have this technology", vbExclamation, "Access Denied" End If Case 7 'jammers 'UnitCost = 15 'exit sub if planet already has a shield If Planet(ActivePlanet).HaveJammer Then PlaySoundEffect "Quiet" MsgBox "This planet already has a jamming device", vbInformation, "Transaction Cancelled" Exit Sub End If If Player(Current).JammerResearched Then 'check if enough money! UnitCost = 15 If Player(Current).NumResources >= UnitCost Then 'enable the scrollbar hsbQuantity.Enabled = True hsbQuantity.Value = 0 lblItemName = "Scanner Jamming Device" lblQuantity = Str(hsbQuantity.Value) txtTotal.Text = Str(hsbQuantity.Value) 'get max value for scroll bar hsbQuantity.Max = 1 Else PlaySoundEffect "Quiet" MsgBox "Insufficient resources", vbExclamation, "Transaction Denied" End If Else PlaySoundEffect "Quiet" MsgBox "You do not have this technology", vbExclamation, "Access Denied" End If End Select End Sub Private Sub picUpgrade_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) txtStatus.ForeColor = vbGreen 'show text describing each of the upgrade icons Select Case Index Case 0 txtStatus.Text = "Planetary Missile Defences" Case 1 txtStatus.Text = "Planetary Shield Defenses" Case 2 txtStatus.Text = "Improved Resource Production Facility" Case 3 txtStatus.Text = "Recruit Troops" Case 4 txtStatus.Text = "Recruit Assault Troops" Case 5 txtStatus.Text = "Research Advanced Technologies" Case 6 txtStatus.Text = "Space Scanner" Case 7 txtStatus.Text = "Anti-Scanning Jammer" End Select End Sub Private Sub tmrRandomSounds_Timer() 'play random sound effect PlayRandomSound End Sub Private Sub tmrUpdateMessageBox_Timer() txtMessages.Text = "No New Messages..." tmrUpdateMessageBox.Enabled = False End Sub Private Sub txtMessages_KeyDown(KeyCode As Integer, Shift As Integer) KeyCode = 0 End Sub Private Sub txtMessages_KeyPress(KeyAscii As Integer) KeyAscii = 0 End Sub Private Sub txtMessages_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) txtStatus.Text = "View or Send Messages" End Sub Private Sub txtNumAssaultTroops_KeyDown(KeyCode As Integer, Shift As Integer) KeyCode = 0 End Sub Private Sub txtNumAssaultTroops_KeyPress(KeyAscii As Integer) KeyAscii = 0 End Sub Private Sub txtNumPlanets_KeyDown(KeyCode As Integer, Shift As Integer) KeyCode = 0 End Sub Private Sub txtNumPlanets_KeyPress(KeyAscii As Integer) KeyAscii = 0 End Sub Private Sub txtNumResources_KeyDown(KeyCode As Integer, Shift As Integer) KeyCode = 0 End Sub Private Sub txtNumResources_KeyPress(KeyAscii As Integer) KeyAscii = 0 End Sub Private Sub txtNumTroops_KeyDown(KeyCode As Integer, Shift As Integer) KeyCode = 0 End Sub Private Sub txtNumTroops_KeyPress(KeyAscii As Integer) KeyAscii = 0 End Sub Private Sub txtPlayerName_KeyDown(KeyCode As Integer, Shift As Integer) KeyCode = 0 End Sub Private Sub txtPlayerName_KeyPress(KeyAscii As Integer) KeyAscii = 0 End Sub Private Sub txtPlayerName_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) txtStatus.Text = "" End Sub Private Sub txtProduction_KeyDown(KeyCode As Integer, Shift As Integer) KeyCode = 0 End Sub Private Sub txtProduction_KeyPress(KeyAscii As Integer) KeyAscii = 0 End Sub Private Sub txtStatus_KeyPress(KeyAscii As Integer) KeyAscii = 0 End Sub Private Sub txtStatus_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) txtStatus.Text = "" End Sub Public Sub DrawGalaxy() Randomize 'Called by the form_Activate procedure 'draw white stars on the playing field Dim a, X, Y For a = 1 To 700 X = Int(Rnd * picGalaxy.ScaleWidth) Y = Int(Rnd * picGalaxy.ScaleHeight) picGalaxy.PSet (X, Y) Next a 'draw darker stars for depth Dim grey grey = &H808080 For a = 1 To 1000 X = Int(Rnd * picGalaxy.ScaleWidth) Y = Int(Rnd * picGalaxy.ScaleHeight) picGalaxy.PSet (X, Y), grey Next a 'drawing grid lines moved to its own proc End Sub Private Sub txtTurnNumber_KeyDown(KeyCode As Integer, Shift As Integer) KeyCode = 0 End Sub Private Sub txtTurnNumber_KeyPress(KeyAscii As Integer) KeyAscii = 0 End Sub Public Sub UpdatePlayerStats() 'fill in values for player stats box txtNumPlanets.Text = Str(Player(Current).NumPlanets) txtNumTroops.Text = Str(Player(Current).NumTroops) txtNumResources.Text = Str(Player(Current).NumResources) txtNumAssaultTroops.Text = Str(Player(Current).NumAssaultTroops) 'redo resources/turn box Dim h, i i = 0 For h = 0 To 49 If Planet(h).Owner = Current Then i = i + Planet(h).Resources End If Next h txtProduction.Text = Str(i) End Sub Public Sub Personalize() 'set caption and player name to current player If Current = 0 Then frmGameScreen.Caption = " 4000 A.D. (Player 1) " ElseIf Current = 1 Then frmGameScreen.Caption = " 4000 A.D. (Player 2) " End If If Player(1).Name = "" Then Player(1).Name = "?" End If frmGameScreen.Caption = frmGameScreen.Caption + " " + Player(0).Name + " vs. " + Player(1).Name If Player(1).Name = "?" Then Player(1).Name = "" End If 'set the current player's name in the name box txtPlayerName.Text = Player(Current).Name End Sub Public Sub UpdateResources() 'at start of each turn, add up resources 'current plus resources of each owned planet Dim i For i = 0 To 49 If Planet(i).Owner = Current Then Player(Current).NumResources = Player(Current).NumResources + Planet(i).Resources End If Next i End Sub Public Sub UpdateNumPlanets() 'at start of each turn - and after getting new planets, 'and after battles, add up number of planets owned 'and total troops/assault troops 'first, set numplanet to zero to avoid recounting Player(Current).NumPlanets = 0 Player(Current).NumTroops = 0 Player(Current).NumAssaultTroops = 0 Dim i For i = 0 To 49 If Planet(i).Owner = Current Then Player(Current).NumPlanets = Player(Current).NumPlanets + 1 Player(Current).NumTroops = Player(Current).NumTroops + Planet(i).Troops Player(Current).NumAssaultTroops = Player(Current).NumAssaultTroops + Planet(i).AssaultTroops End If Next i End Sub Public Sub ReInitializeShip(activeship As Integer) 'set all the values to zero, not launched, etc 'using ActiveShip as the indicator With Player(Current).Ship(activeship) .Launched = False .Troops = 0 .AssaultTroops = 0 .CombatStrength = 0 .HaveShields = False .HaveWeapons = False .HaveCloakingDevice = False .Sabotage = False .WarpPosition = 0 .Coordinate = "" .CenterX = 0 .CenterY = 0 End With End Sub Public Sub ReInitializePlanet(Index As Integer) 'add the players stuff to the planet Planet(Index).Troops = Player(Current).Ship(activeship).Troops Planet(Index).AssaultTroops = Player(Current).Ship(activeship).AssaultTroops End Sub Public Sub EraseCircles() 'redraw the circles to erase them '***Only erases yellow circles!!! Dim xpos, ypos, radius Dim z For z = 0 To 49 If Planet(z).InRange And picPlanet(z).Visible Then 'find center of the picturebox and draw circle xpos = picPlanet(z).Left + (picPlanet(z).Width / 2) ypos = picPlanet(z).Top + (picPlanet(z).Height / 2) radius = (picPlanet(z).Width / 2) + 45 'set drawmode picGalaxy.DrawMode = 7 picGalaxy.DrawWidth = 1 picGalaxy.Circle (xpos, ypos), radius, vbYellow End If Next z 'reset the inrange value to false to prevent screwy drawing For z = 0 To 49 Planet(z).InRange = False Next z 'set the readytoland value to false to prevent screwy drawing... ReadyToLand1 = False ReadyToLand2 = False End Sub Private Sub txtTurnNumber_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) txtStatus.Text = " " End Sub Public Sub ClearFrame() 'clear up the management frame - set everything to zero etc. 'reset the scroll bar and labels hsbQuantity.Enabled = False lblItemName.Caption = "" lblQuantity.Caption = "" txtTotal.Text = "" 'reset the purchase price to zero '**this is used to initialize txtTotal.text PurchasePrice = 0 'disable the management and ship frames again cmdPlanetName.Caption = "" fraUpgrade.Enabled = False cmdOK.Enabled = False 'turn off scanner If ScannerOn Then cmdScan_Click ScannerOn = False cmdScan.Enabled = False End If If RegenerateOn Then RegenerateOn = False cmdRegenerate.Enabled = False End If If BioRocketOn Then BioRocketOn = False End If 'turn off all the buttons cmdRepairIndustry.Enabled = False cmdLaunchBioRocket.Enabled = False cmdRegenerate.Enabled = False cmdCleanup.Enabled = False 'deal with landing buttons - conflict with scanner button If ReadyToLand1 Then cmdLandShip1_Click End If If ReadyToLand2 Then cmdLandShip2_Click End If End Sub Public Sub CheckForAliens() 'see if weak planet is attacked by aliens Dim ChanceOfInvasion Dim Result As Integer Dim X As Integer Dim PlanetCS As Integer Dim AlienCS As Integer '***************** '**Experimented with increasing minimums as game went on, '**but decided it would affect play balance too much 'Dim MinTroops As Integer 'threshold # for invasion test 'Dim MinMechs As Integer 'calculate the strength of planet that is weak enough for invasion 'MinTroops = Int(Rnd * (TurnNumber / 5)) + 2 'MinMechs = Int(Rnd * (TurnNumber / 8)) + 1 '****************** Randomize For X = 0 To 49 If Planet(X).Owner = Current Then If Planet(X).Troops < 4 And Planet(X).AssaultTroops < 2 Then '5-15% chance ChanceOfInvasion = Int(Rnd * 10) + 5 Result = Int(Rnd * 100) + 1 If Result <= ChanceOfInvasion Then 'planet attacked 'compare combatstrengths '***Alien strength builds with turn number! AlienCS = Int(Rnd * 10) + Int(TurnNumber / 3) If AlienCS > Planet(X).CombatStrength Then 'Aliens Win With Planet(X) .Owner = Alien .Troops = AlienCS - Planet(X).CombatStrength .Resources = Int(Rnd * 6) + 1 End With SetCombatStrength (X) 'MsgBox Planet(X).Name + " Overrun By The Melnikons!", vbOKOnly + vbExclamation, "Alien Invasion!" '****** 'Set various messages for overrun Dim alternate1 As String Dim alternate2 As String Dim alternate3 As String Dim alternate4 As String Dim choice As Integer Randomize choice = Int(Rnd * 4) + 1 alternate1 = "Defenses Breached...Casualties Mounting..." alternate2 = "Security Perimeter Down...Shields Failed" alternate3 = "Warning Systems Sabotaged...Need Help!..." alternate4 = "They're Everywhere! If we can just--" MessageType = "Overrun" Announceline1 = "Melnikon Invasion Reported On " + Planet(X).Name + "!" Select Case choice Case 1 Announceline2 = alternate1 Case 2 Announceline2 = alternate2 Case 3 Announceline2 = alternate3 Case 4 Announceline2 = alternate4 End Select Announceline3 = "" frmAnnounce.Show Modal ElseIf AlienCS <= Planet(X).CombatStrength Then 'Player Wins Dim Msg As String Msg = "Melnikon Invasion Force Destroyed!" AlienCS = Int(AlienCS / 2) 'lose troops if any If Planet(X).Troops > 0 Then Planet(X).Troops = Planet(X).Troops - AlienCS If Planet(X).Troops < 0 Then Planet(X).Troops = 0 End If End If 'lose some mechs if any If Planet(X).AssaultTroops > 0 Then Planet(X).AssaultTroops = Planet(X).AssaultTroops - Int(AlienCS / 2) If Planet(X).AssaultTroops < 0 Then Planet(X).AssaultTroops = 0 End If End If SetCombatStrength (X) MessageType = "Victorious" Announceline1 = "Melnikon Invasion of " + Planet(X).Name + " Defeated!" If Planet(X).Owner = Current Then Announceline2 = "Troop Losses:" + Str(AlienCS) Announceline3 = "Mech Losses:" + Str(Int(AlienCS / 2)) Else Announceline2 = "" Announceline3 = "" End If frmAnnounce.Show Modal 'MsgBox Msg, vbOKOnly + vbExclamation, "Report From " + Planet(X).Name 'Debug.Print "AlienCS/2:" + Str(AlienCS) End If End If End If End If Next X End Sub Public Sub AttackAliens(Index As Integer) 'attack procedure when landing on alien planets Dim RandomLosses Dim a, b 'set random number generator Randomize 'set placeholder for current player's combat strength AttackStrength = Player(Current).Ship(activeship).CombatStrength DefenceStrength = Planet(Index).CombatStrength a = Player(Current).Ship(activeship).Troops b = Player(Current).Ship(activeship).AssaultTroops 'set placeholders for troops on the planet Dim c, d c = Planet(Index).Troops d = Planet(Index).AssaultTroops PlaySoundEffect "Attack" 'MsgBox "Attack!", , " " 'compare the strengths If AttackStrength > DefenceStrength Then 'ATTACKER WINS 'don't allow player to launch from this planet this turn Planet(Index).JustLanded = True If a > 0 And DefenceStrength > 0 Then 'winner loses 10-50% of troops RandomLosses = Int(Rnd * 4) + 1 RandomLosses = RandomLosses / 10 a = a - (a * RandomLosses) TroopLosses = RandomLosses * 100 End If If b > 0 And DefenceStrength > 0 Then 'winner loses 10-30% of assault troops RandomLosses = Int(Rnd * 3) + 1 RandomLosses = RandomLosses / 10 b = b - (b * RandomLosses) AssaultLosses = RandomLosses * 100 End If 'planet troops, combatstrength changes Planet(Index).Troops = a Planet(Index).AssaultTroops = b 'set this variable for frmlandscape: ActivePlanet = Index 'show the results of the battle frmLandscape.Show Modal 'planet changes owners Planet(Index).Owner = Current 'set planet's combat strength SetCombatStrength (Index) 'update player: resources, numplanets UpdateNumPlanets UpdatePlayerStats 'clear the management frame ClearFrame cmdPreviewShip1.Enabled = True cmdPreviewShip2.Enabled = True cmdPreviewEnemy1.Enabled = True cmdPreviewEnemy2.Enabled = True '************************************ ElseIf AttackStrength <= Planet(Index).CombatStrength Then 'defender wins, and tie goes to the defender 'current player loses all troops Player(Current).NumTroops = Player(Current).NumTroops - a Player(Current).NumAssaultTroops = Player(Current).NumAssaultTroops - b If Planet(Index).Troops > 0 Then 'winner loses 10-50% of troops RandomLosses = Int(Rnd * 4) + 1 RandomLosses = RandomLosses / 10 c = c - (c * RandomLosses) TroopLosses = RandomLosses * 100 Planet(Index).Troops = c End If If Planet(Index).AssaultTroops > 0 Then 'winner loses 10-40% of assault troops RandomLosses = Int(Rnd * 4) + 1 RandomLosses = RandomLosses / 10 d = d - (d * RandomLosses) AssaultLosses = RandomLosses * 100 Planet(Index).AssaultTroops = d End If 'update planet's combat strength SetCombatStrength (Index) UpdateNumPlanets UpdatePlayerStats 'clear management frame ClearFrame cmdPreviewShip1.Enabled = True cmdPreviewShip2.Enabled = True cmdPreviewEnemy1.Enabled = True cmdPreviewEnemy2.Enabled = True 'set this variable for frmlandscape: ActivePlanet = Index 'show the results of the battle frmLandscape.Show Modal End If 'disable the landing button and remove from warp path If activeship = 0 Then cmdLandShip1.Enabled = False 'get rid of the ship picture picPlayerPath(Player(Current).Ship(activeship).WarpPosition - 1).Picture = LoadPicture() ElseIf activeship = 1 Then cmdLandShip2.Enabled = False 'get rid of the ship picture picPlayerPath(Player(Current).Ship(activeship).WarpPosition - 1).Picture = LoadPicture() End If 'set ship values to unlaunched and empty ReInitializeShip (activeship) RefreshWarpPath End Sub Public Sub SabotageLanding(Index As Integer, activeship As Integer) 'determine results of sabotage mission Dim CurrentPlayer, Enemy CurrentPlayer = Current Enemy = Other Select Case Planet(Index).Owner Case CurrentPlayer 'do nothing, mission wasted by landing on player's own planet PlaySoundEffect "Quiet" MsgBox "Mission aborted", vbOKOnly, " " Case Enemy Dim Success As Integer Dim Result As Integer Success = 95 'success varies with number of troops, mechs and technology on planet Select Case Planet(Index).Troops Case 0 To 5 Success = Success - 1 Case 6 To 10 Success = Success - 2 Case 11 To 15 Success = Success - 4 Case Else Success = Success - 6 End Select 'mechs Select Case Planet(Index).AssaultTroops Case 0 To 1 Success = Success - 1 Case 2 To 5 Success = Success - 3 Case Else Success = Success - 5 End Select 'missiles If Planet(Index).HaveMissiles Then 'check what level of missiles other player has researched If Player(Other).Missile2Researched Then Success = Success - 4 Else Success = Success - 2 End If End If If Planet(Index).HaveShields Then Success = Success - 3 End If If Planet(Index).HaveScanner Then Success = Success - 5 End If Result = Int(Rnd * 100) Debug.Print "Result: ", Result, " Success: ", Success If Result <= Success Then 'mission successful Dim Damage As Integer Dim Reduction Dim FactoryFlag As Boolean Dim msg1 As String Dim msg2 As String msg1 = "Advanced production facilities destroyed!" msg2 = "Planet's resource production eliminated!" Damage = Int(Rnd * 4) + 2 '2-6 damage If Planet(Index).ImprovedResources Then 'factory destroyed Planet(Index).ImprovedResources = False FactoryFlag = True 'tell other player his factory destroyed Planet(Index).SabotagedFactory = True End If 'Fixes divide by zero error!! If Planet(Index).Resources < 1 Then Reduction = -1 'NOTE: if the same planet is sabotaged twice in 1 turn 'there may not be a message to the other player if the 'first sabotage reduced resources to zero Else Reduction = Damage / Planet(Index).Resources Reduction = Int(Reduction * 100) End If Planet(Index).Resources = Planet(Index).Resources - Damage If Planet(Index).Resources < 0 Then Planet(Index).Resources = 0 End If If Planet(Index).Resources > 0 And FactoryFlag Then PlaySoundEffect "Quiet" MsgBox "Mission accomplished!" + Chr(13) + msg1 + Chr(13) + "Resource production reduced by " + Str(Reduction) + "%", vbOKOnly, "Sabotage Mission Results" ElseIf Planet(Index).Resources > 0 And Not FactoryFlag Then PlaySoundEffect "Quiet" MsgBox "Resource production on " + Planet(Index).Name + " crippled!" + Chr(13) + "Resource production reduced by" + Str(Reduction) + "%", vbOKOnly, "Sabotage Mission Results" ElseIf Planet(Index).Resources <= 0 Then PlaySoundEffect "Quiet" MsgBox msg2, , "Sabotage Mission Results" End If '***should set flag to give other player message at startup Planet(Index).Sabotaged = True Planet(Index).SabotageReduction = Reduction 'set flag to enable cmdRepairIndustry Planet(Index).Damaged = True ElseIf Result > Success Then 'MISSION FAILED PlaySoundEffect "Quiet" MsgBox "Mission failed - ship destroyed in orbit around " + Planet(Index).Name, vbOKOnly, "Sabotage Mission Results" 'set flag to tell other player next turn Planet(Index).Sabotaged = True Planet(Index).SabotageReduction = 0 'this will show that mission failed, show different message Planet(Index).SabotagedFactory = False 'factory not destroyed End If Case Neutral 'do nothing PlaySoundEffect "Quiet" MsgBox "Mission failed - neutral planet", vbOKOnly, "Sabotage Mission Results" Case Alien 'reduce resources to 0 Planet(Index).Resources = 0 PlaySoundEffect "Quiet" MsgBox "Alien resource production facilities destroyed", vbOKOnly + vbExclamation, "Sabotage Mission Results" End Select EraseShip: 'disable the landing button and remove from warp path If activeship = 0 Then cmdLandShip1.Enabled = False 'get rid of the ship picture picPlayerPath(Player(Current).Ship(activeship).WarpPosition - 1).Picture = LoadPicture() End If If activeship = 1 Then cmdLandShip2.Enabled = False 'get rid of the ship picture picPlayerPath(Player(Current).Ship(activeship).WarpPosition - 1).Picture = LoadPicture() End If 'set ship values to unlaunched and empty ReInitializeShip (activeship) RefreshWarpPath End Sub Public Sub BioDamage(X As Integer) 'this happens every turn on contaminated planets Randomize If Planet(X).Troops = 0 Or Planet(X).BioRocketETA = TurnNumber Then Exit Sub End If If Planet(X).Troops <= 2 Then Planet(X).Troops = Planet(X).Troops - 1 If Planet(X).Troops <= 0 Then PlaySoundEffect "Quiet" MsgBox "Contamination warning: all troops dead.", vbOKOnly + vbExclamation, "Report From: " + Planet(X).Name Planet(X).Troops = 0 Exit Sub End If 'don't show msgbox if it's the same turn the rocket hits If Planet(X).BioRocketETA = TurnNumber Then 'do nothing Else PlaySoundEffect "Warning" MsgBox "Contamination warning: 1 troop dead.", vbOKOnly + vbExclamation, "Report From: " + Planet(X).Name End If ElseIf Planet(X).Troops > 2 Then Dim Damage As Integer Dim Dead As Integer 'kill of 25-50% of troops Damage = Int(Rnd * 25) + 25 'Damage = Damage / 100 Dead = Int(Planet(X).Troops * Damage) Dead = Int(Dead / 100) 'should be at least 1 dead per turn If Dead < 1 Then Dead = 1 End If Planet(X).Troops = Planet(X).Troops - Dead Dim msg1 As String If Dead = 1 Then msg1 = " troop dead." Else msg1 = " troops dead." End If If Planet(X).BioRocketETA = TurnNumber Then 'do nothing Else PlaySoundEffect "Warning" MsgBox "Contamination warning: " + Str(Dead) + msg1, vbOKOnly + vbExclamation, "Report From: " + Planet(X).Name End If End If End Sub Public Sub EraseLines() 'redraw the lines to erase them Dim x1, y1 Dim z As Integer For z = 0 To 49 If Planet(z).LaunchSite Then x1 = picPlanet(z).Left + (picPlanet(z).Width / 2) y1 = picPlanet(z).Top + (picPlanet(z).Height / 2) Exit For End If Next z Dim X2, Y2 For z = 0 To 49 If Planet(z).InBioRange Then 'find center of the picturebox and draw line X2 = picPlanet(z).Left + (picPlanet(z).Width / 2) Y2 = picPlanet(z).Top + (picPlanet(z).Height / 2) 'set drawmode picGalaxy.DrawMode = 7 picGalaxy.DrawWidth = 2 picGalaxy.Line (x1, y1)-(X2, Y2), vbMagenta End If Next z 'reset the inbiorange value to false to prevent screwy drawing For z = 0 To 49 Planet(z).InBioRange = False Next z 'reset the launchsite to false For z = 0 To 49 If Planet(z).LaunchSite Then Planet(z).LaunchSite = False Exit For End If Next z 'reset biorocketon to false BioRocketOn = False End Sub Public Sub TargetBioRocket(Index As Integer) 'let player know how long it will take for biorocket to reach target Dim ETA As Integer Dim RocketCost As Integer RocketCost = 30 'final cost check If BioRocketOn Then 'continue with sub ETA = Int(Planet(Index).BioDistance / 300) Planet(Index).BioRocketETA = TurnNumber + ETA If SoundOn Then 'select which turn# sound file to play Select Case ETA Case 1 Sound = App.Path + "\1turn.wav" sndPlaySound Sound, 3 Case 2 Sound = App.Path + "\2turns.wav" sndPlaySound Sound, 3 Case 3 Sound = App.Path + "\3turns.wav" sndPlaySound Sound, 3 Case 4 Sound = App.Path + "\4turns.wav" sndPlaySound Sound, 3 Case 5 Sound = App.Path + "\5turns.wav" sndPlaySound Sound, 3 Case 6 Sound = App.Path + "\6turns.wav" sndPlaySound Sound, 3 Case 7 Sound = App.Path + "\7turns.wav" sndPlaySound Sound, 3 End Select End If PlaySoundEffect "Button3" MsgBox "Planet " + Planet(Index).Name + " targeted." + Chr(13) + Chr(13) + "BioHazard Rocket ETA:" + Str(ETA) + " Turns.", , " " 'deduct funds Player(Current).NumResources = Player(Current).NumResources - RocketCost UpdatePlayerStats 'erase lines and reset launchsite to false EraseLines 'clear frame ClearFrame Exit Sub End If End Sub Public Sub WriteBigFile() 'save all the general info - message to other player... Dim Filename As String Dim ShortName As String ShortName = "\gameinfo.txt" Filename = App.Path & ShortName 'get a free file number gFileNum = FreeFile 'create the file Open Filename For Output As gFileNum 'write galaxysize Write #gFileNum, GalaxySize 'write the planet data Dim i For i = 0 To 49 Write #gFileNum, Planet(i).Name, Planet(i).Owner, Planet(i).Troops, _ Planet(i).AssaultTroops, Planet(i).CombatStrength, Planet(i).Coordinate, _ Planet(i).Resources, Planet(i).HaveMissiles, Planet(i).HaveShields, _ Planet(i).ImprovedResources, Planet(i).HaveScanner, Planet(i).BackGround, _ Planet(i).HaveJammer, Planet(i).BioRocketETA, Planet(i).Contaminated, Planet(i).NukedResources, _ Planet(i).Sabotaged, Planet(i).SabotageReduction, Planet(i).SabotagedFactory, Planet(i).Damaged, _ Planet(i).BioFailed 'write the player data For i = 0 To 1 Write #gFileNum, Current, TurnNumber, Player(i).Name, Player(i).NumTroops, Player(i).NumAssaultTroops, Player(i).NumPlanets, Player(i).NumResources, _ Player(i).HomePlanet, Player(i).Message1Given, Player(i).Message2Given, Player(i).WasBig, Player(i).Missile1ResearchDone, Player(i).Missile1Researched, _ Player(i).Missile2ResearchDone, Player(i).Missile2Researched, Player(i).ShieldResearchDone, Player(i).ShieldResearched, _ Player(i).LaserResearchDone, Player(i).LaserResearched, Player(i).PlasmaResearchDone, Player(i).PlasmaResearched, Player(i).MechResearchDone, Player(i).MechResearched, _ Player(i).BioRocketResearchDone, Player(i).BioRocketResearched, Player(i).LongBioResearchDone, Player(i).LongBioResearched, Player(i).ShipShield1ResearchDone, Player(i).ShipShield1Researched, _ Player(i).ShipShield2ResearchDone, Player(i).ShipShield2Researched, Player(i).BigShipResearchDone, Player(i).BigShipResearched, Player(i).UltraWarpResearchDone, Player(i).UltraWarpResearched, _ Player(i).CloakingResearchDone, Player(i).CloakingResearched, Player(i).ResourceResearchDone, Player(i).ResourcesResearched, Player(i).BioCleanupResearchDone, Player(i).BioCleanupResearched, _ Player(i).RegenerationResearchDone, Player(i).RegenerationResearched, Player(i).ScannerResearchDone, Player(i).ScannerResearched, Player(i).DeepScannerResearchDone, Player(i).DeepScannerResearched, _ Player(i).JammerResearchDone, Player(i).JammerResearched, Player(i).WarpScannerResearchDone, Player(i).WarpScannerResearched 'write the ship data For i = 0 To 1 Write #gFileNum, Player(0).Ship(i).Launched, Player(0).Ship(i).HaveCloakingDevice, _ Player(0).Ship(i).Troops, Player(0).Ship(i).AssaultTroops, _ Player(0).Ship(i).CombatStrength, Player(0).Ship(i).WarpPosition, _ Player(0).Ship(i).Coordinate, Player(0).Ship(i).CenterX, _ Player(0).Ship(i).CenterY, Player(0).Ship(i).ShipNumber, Player(0).Ship(i).Sabotage, _ Player(1).Ship(i).Launched, Player(1).Ship(i).HaveCloakingDevice, _ Player(1).Ship(i).Troops, Player(1).Ship(i).AssaultTroops, _ Player(1).Ship(i).CombatStrength, Player(1).Ship(i).WarpPosition, _ Player(1).Ship(i).Coordinate, Player(1).Ship(i).CenterX, _ Player(1).Ship(i).CenterY, Player(1).Ship(i).ShipNumber, Player(1).Ship(i).Sabotage 'write the general data Write #gFileNum, OutgoingMessage, Player(Current).WasBig 'captured planet data Write #gFileNum, NumPlanetsCaptured For i = 0 To 49 Write #gFileNum, Planet(i).Captured Next i 'failed invasion data Write #gFileNum, NumFailedInvasions For i = 0 To 49 Write #gFileNum, Planet(i).FailedInvasion, Planet(i).FailedInvasionTroopLosses, Planet(i).FailedInvasionMechLosses Next i 'close the file Close gFileNum End Sub Public Sub Detonation(X As Integer) Randomize 'see if rocket hits, or is shot down by planet defenses Dim Success As Integer Dim Result As Integer 'set base chance of success Success = 100 'success varies with technology on planet If Planet(X).HaveMissiles Then If Player(Current).Missile1Researched Then Success = Success - 2 End If If Player(Current).Missile2Researched Then Success = Success - 3 End If End If If Planet(X).HaveShields Then Success = Success - 7 End If If Planet(X).HaveScanner Then Success = Success - 2 End If Result = Int(Rnd * 100) If Result <= Success Then 'rocket hits 'explosion - kills troops and drastically reduces resource production If Planet(X).Owner = Current Then 'duh! 'tally the damage to troops and resources If Planet(X).Troops > 0 Then Randomize Dim Damage As Integer Dim Dead As Integer 'kill of 25-50% of troops Damage = Int(Rnd * 25) + 25 Dead = Int(Planet(X).Troops * Damage) Dead = Int(Dead / 100) 'should be at least 1 killed/turn If Dead < 1 Then Dead = 1 End If Planet(X).Troops = Planet(X).Troops - Dead End If 'resource production hurt bad Dim ProductionDamage '3-8 damage to resources ProductionDamage = Int(Rnd * 5) + 3 Planet(X).Resources = Planet(X).Resources - ProductionDamage If Planet(X).Resources < 0 Then Planet(X).Resources = 0 End If 'reset improved resource production to false, let them build again Planet(X).ImprovedResources = False End If 'end of if planet.owner=current loop 'Announcement screen MessageType = "Explosion" If Planet(X).Owner = Current Then Announceline1 = "A Massive Explosion On " + Planet(X).Name + "!" Announceline2 = "Troop Losses: " + Str(Dead) Announceline3 = "Resource Production Reduced To:" + Str(Planet(X).Resources) Else Announceline1 = "Successful BioRocket Detonation On " + Planet(X).Name + "!" Announceline2 = "" Announceline3 = "" End If frmAnnounce.Show Modal Planet(X).Contaminated = True Planet(X).NukedResources = True 'result > success, therefore the missile didn't detonate! PlaySoundEffect "Quiet" MsgBox "BioRocket destroyed by defensive systems on " + Planet(X).Name + "!" 'Debug.Print "Result:"; Result, "Success:"; Success 'set warning to show other player on their next turn Planet(X).BioFailed = True End If End Sub Public Sub RefreshWarpPath() 'put ships on the warp path with coordinates printed below Dim z 'counter Dim j, k 'hold warp positions - easier to type & read j = Player(Current).Ship(0).WarpPosition k = Player(Current).Ship(1).WarpPosition If Player(Current).Ship(0).Launched And Player(Current).Ship(1).Launched And j = k Then 'both ships on same warp box 'check if in 2nd to last box If j = 7 And Warp7WarningGiven = False Then Dim Msg As String Msg = "Your ships must land next turn. Be advised" + Chr(13) Msg = Msg + "of the risk that no suitable planet will be" + Chr(13) Msg = Msg + "in range before the warp path disintegrates." 'play warning and show message PlaySoundEffect "Disintegrate" MsgBox Msg, vbOKOnly + vbExclamation, "Warp Path Warning" Warp7WarningGiven = True End If 'check if in last warp box If j = 8 And Warp8WarningGiven = False Then PlaySoundEffect "Disintegrate" LostInSpace If NumPlanets1 = 0 Then PlaySoundEffect "Warning" MsgBox "Ship 1 Destroyed", vbCritical, "Warp Path Disintegration" ReInitializeShip (0) End If If NumPlanets2 = 0 Then PlaySoundEffect "Warning" MsgBox "Ship 2 Destroyed", vbCritical, "Warp Path Disintegration" ReInitializeShip (1) End If If NumPlanets1 > 0 And NumPlanets2 > 0 Then PlaySoundEffect "Warning" MsgBox "Your ships must land this turn", vbOKOnly + vbCritical, "Warp Path Disintegrating!" End If Warp8WarningGiven = True 'this is a flag to only show this warning once at the start 'and once at the end of the turn End If picPlayerPath(j - 1).Picture = picTiny.Picture 'set ship 1 coordinate on top left picPlayerPath(j - 1).CurrentX = 0 picPlayerPath(j - 1).CurrentY = 0 picPlayerPath(j - 1).Print Player(Current).Ship(0).Coordinate '***Put an S instead of CS if a sabotage mission If Player(Current).Ship(0).Sabotage Then picPlayerPath(j - 1).CurrentX = 450 picPlayerPath(j - 1).CurrentY = 0 picPlayerPath(j - 1).FontBold = True picPlayerPath(j - 1).Print "S" picPlayerPath(j - 1).FontBold = False Else 'ship 1 CS on top right '***change currentx depending on value of CS If Player(Current).Ship(0).CombatStrength > 99 Then picPlayerPath(j - 1).CurrentX = 300 ElseIf Player(Current).Ship(0).CombatStrength > 9 Then picPlayerPath(j - 1).CurrentX = 360 Else picPlayerPath(j - 1).CurrentX = 440 End If '*** picPlayerPath(j - 1).CurrentY = 0 picPlayerPath(j - 1).Print Player(Current).Ship(0).CombatStrength End If 'set ship 2 coordinate at bottom left corner picPlayerPath(j - 1).CurrentX = 0 picPlayerPath(j - 1).CurrentY = 465 picPlayerPath(j - 1).Print Player(Current).Ship(1).Coordinate '***print S if a sabotage mission If Player(Current).Ship(1).Sabotage Then picPlayerPath(j - 1).CurrentX = 450 picPlayerPath(j - 1).CurrentY = 465 picPlayerPath(j - 1).FontBold = True picPlayerPath(j - 1).Print "S" picPlayerPath(j - 1).FontBold = False Else 'set ship 2 CS at bottom right corner '***change currentx depending on value of CS If Player(Current).Ship(1).CombatStrength > 99 Then picPlayerPath(j - 1).CurrentX = 300 ElseIf Player(Current).Ship(1).CombatStrength > 9 Then picPlayerPath(j - 1).CurrentX = 360 Else picPlayerPath(j - 1).CurrentX = 440 End If '*** picPlayerPath(j - 1).CurrentY = 465 picPlayerPath(j - 1).Print Player(Current).Ship(1).CombatStrength End If 'ships not in same box For z = 0 To 1 If Player(Current).Ship(z).Launched Then j = Player(Current).Ship(z).WarpPosition 'check if in 2nd to last box If j = 7 And Warp7WarningGiven = False Then Dim message As String message = "Your ship must land next turn. Be advised" + Chr(13) message = message + "of the risk that no suitable planet will be" + Chr(13) message = message + "in range before the warp path disintegrates." PlaySoundEffect "Warning" MsgBox message, vbOKOnly + vbExclamation, "Warp Path Warning" Warp7WarningGiven = True End If 'check if in last warp box If j = 8 And Warp8WarningGiven = False Then PlaySoundEffect "Disintegrate" LostInSpace If NumPlanets1 = 0 Then PlaySoundEffect "Warning" MsgBox "Ship 1 Destroyed", vbCritical, "Warp Path Disintegration" ReInitializeShip (0) End If If NumPlanets2 = 0 Then PlaySoundEffect "Warning" MsgBox "Ship 2 Destroyed", vbCritical, "Warp Path Disintegration" ReInitializeShip (1) End If If NumPlanets1 > 0 And NumPlanets2 > 0 Then PlaySoundEffect "Warning" MsgBox "Your ship must land this turn", vbOKOnly + vbCritical, "Warp Path Disintegrating!" End If Warp8WarningGiven = True End If picPlayerPath(j - 1).Picture = picTemp.Picture 'set shipnumber at top right picPlayerPath(j - 1).CurrentX = 435 picPlayerPath(j - 1).CurrentY = 0 picPlayerPath(j - 1).Print Player(Current).Ship(z).ShipNumber + 1 'set coordinate at bottom left corner picPlayerPath(j - 1).CurrentX = 50 picPlayerPath(j - 1).CurrentY = 465 picPlayerPath(j - 1).Print Player(Current).Ship(z).Coordinate 'set cursor at bottom right corner '**print S if sabotage mission If Player(Current).Ship(z).Sabotage Then picPlayerPath(j - 1).CurrentX = 450 picPlayerPath(j - 1).CurrentY = 465 picPlayerPath(j - 1).FontBold = True picPlayerPath(j - 1).Print "S" picPlayerPath(j - 1).FontBold = False Else '***change currentx depending on value of CS If Player(Current).Ship(z).CombatStrength > 99 Then picPlayerPath(j - 1).CurrentX = 300 ElseIf Player(Current).Ship(z).CombatStrength > 9 Then picPlayerPath(j - 1).CurrentX = 360 Else picPlayerPath(j - 1).CurrentX = 440 End If '*** picPlayerPath(j - 1).CurrentY = 465 picPlayerPath(j - 1).Print Player(Current).Ship(z).CombatStrength End If End If Next z End If If Player(Current).Ship(0).Launched Then cmdLandShip1.Enabled = True ElseIf Player(Current).Ship(1).Launched Then cmdLandShip2.Enabled = True End If 'put player number under owned planets Dim Count As Integer For Count = 0 To 49 If Planet(Count).Owner = Current Then picGalaxy.CurrentX = picPlanet(Count).Left + (picPlanet(Count).Width / 2) - 25 picGalaxy.CurrentY = picPlanet(Count).Top + picPlanet(Count).Height + 15 picGalaxy.ForeColor = vbYellow picGalaxy.Print Str(Current + 1) ElseIf Planet(Count).Owner = Other Then picGalaxy.CurrentX = picPlanet(Count).Left + (picPlanet(Count).Width / 2) - 25 picGalaxy.CurrentY = picPlanet(Count).Top + picPlanet(Count).Height + 15 picGalaxy.ForeColor = vbRed picGalaxy.Print Str(Other + 1) End If Next Count End Sub Public Sub UpdateAliens() 'set alien planet troop levels 'increase as game progresses Randomize Dim i For i = 0 To 49 If Planet(i).Owner = Alien Then Planet(i).Troops = Planet(i).Troops + Int(Rnd * (Int(TurnNumber / 4))) + 1 'upper limit of troops tied to resources on planet Dim UpperLimit As Integer UpperLimit = Planet(i).Resources * 25 If Planet(i).Troops > UpperLimit Then 'vary amount +/- 5 troops Planet(i).Troops = UpperLimit + Int(Rnd * 10) - 5 'MsgBox "resources = " + Str(Planet(i).Resources) + Chr(13) + "troops = " + Str(Planet(i).Troops), , Planet(i).Name End If 'set mechs if enough troops If Planet(i).Troops > 50 Then Planet(i).AssaultTroops = Int(Rnd * 8) + 1 ElseIf Planet(i).Troops > 30 Then Planet(i).AssaultTroops = Int(Rnd * 5) + 1 ElseIf Planet(i).Troops > 20 Then Planet(i).AssaultTroops = Int(Rnd * 3) + 1 End If SetCombatStrength (i) End If Next i End Sub Public Sub LostInSpace() 'count number of planets available for landing 'if count is zero, tell player their ship is lost 'then reinitialize the ship etc. If Player(Current).Ship(0).Launched Then Dim Count As Integer Dim x1, y1, X2, Y2 Dim a As Integer Dim b As Integer Dim Distance Dim RangeLow, RangeHigh Dim xpos, ypos, radius 'set activeship to appropriate ship number activeship = 0 'clear the board of any inrange settings Dim z For z = 0 To 49 Planet(z).InRange = False Next z 'Check for UltraWarp and set ranges If Player(Current).UltraWarpResearched Then 'increased range RangeLow = Player(Current).Ship(0).WarpPosition * 250 RangeHigh = RangeLow + 700 ElseIf Player(Current).UltraWarpResearched = False Then 'lower ranges RangeLow = Player(Current).Ship(0).WarpPosition * 250 RangeHigh = RangeLow + 350 End If 'ship's starting position - originating planet x1 = Player(Current).Ship(0).CenterX y1 = Player(Current).Ship(0).CenterY 'check distance from home planet to each other planet 'if within the range, set planet's InRange to true For Count = 0 To 49 X2 = picPlanet(Count).Left + (picPlanet(Count).Width / 2) Y2 = picPlanet(Count).Top + (picPlanet(Count).Height / 2) a = Abs(x1 - X2) b = Abs(y1 - Y2) Distance = Int(Sqr(a ^ 2 + b ^ 2)) If Distance >= RangeLow And Distance <= RangeHigh And picPlanet(Count).Visible Then 'planet is within range - add to list NumPlanets1 = NumPlanets1 + 1 End If Next Count NumPlanets1 = 999 End If If Player(Current).Ship(1).Launched Then 'set activeship to appropriate ship number activeship = 0 'clear the board of any inrange settings For z = 0 To 49 Planet(z).InRange = False Next z 'Check for UltraWarp and set ranges If Player(Current).UltraWarpResearched Then 'increased range RangeLow = Player(Current).Ship(1).WarpPosition * 250 RangeHigh = RangeLow + 700 ElseIf Player(Current).UltraWarpResearched = False Then 'lower ranges RangeLow = Player(Current).Ship(1).WarpPosition * 250 RangeHigh = RangeLow + 350 End If 'ship's starting position - originating planet x1 = Player(Current).Ship(1).CenterX y1 = Player(Current).Ship(1).CenterY 'check distance from home planet to each other planet 'if within the range, set planet's InRange to true For Count = 0 To 49 X2 = picPlanet(Count).Left + (picPlanet(Count).Width / 2) Y2 = picPlanet(Count).Top + (picPlanet(Count).Height / 2) a = Abs(x1 - X2) b = Abs(y1 - Y2) Distance = Int(Sqr(a ^ 2 + b ^ 2)) If Distance >= RangeLow And Distance <= RangeHigh And picPlanet(Count).Visible Then 'planet is within range - add to list NumPlanets2 = NumPlanets2 + 1 End If Next Count NumPlanets2 = 999 End If 'MsgBox "Number of eligible planets:" + Str(NumPlanets1) End Sub Public Sub DrawGridLines() 'draw grid lines Dim x1, X2, x3, x4 Dim y1, Y2, y3, y4 Dim linecolor, lineheight, linewidth linecolor = &H808080 lineheight = picGalaxy.ScaleHeight linewidth = picGalaxy.ScaleWidth 'vertical lines x1 = picGalaxy.ScaleWidth / 5 picGalaxy.Line (x1, 0)-(x1, lineheight), linecolor X2 = x1 * 2 picGalaxy.Line (X2, 0)-(X2, lineheight), linecolor x3 = x1 * 3 picGalaxy.Line (x3, 0)-(x3, lineheight), linecolor x4 = x1 * 4 picGalaxy.Line (x4, 0)-(x4, lineheight), linecolor 'horizontal lines y1 = picGalaxy.ScaleHeight / 5 picGalaxy.Line (0, y1)-(linewidth, y1), linecolor Y2 = y1 * 2 picGalaxy.Line (0, Y2)-(linewidth, Y2), linecolor y3 = y1 * 3 picGalaxy.Line (0, y3)-(linewidth, y3), linecolor y4 = y1 * 4 picGalaxy.Line (0, y4)-(linewidth, y4), linecolor End Sub Public Sub EraseGridLines() 'draw grid lines Dim x1, X2, x3, x4 Dim y1, Y2, y3, y4 Dim lineheight, linewidth lineheight = picGalaxy.ScaleHeight linewidth = picGalaxy.ScaleWidth 'vertical lines x1 = picGalaxy.ScaleWidth / 5 picGalaxy.Line (x1, 0)-(x1, lineheight), vbBlack X2 = x1 * 2 picGalaxy.Line (X2, 0)-(X2, lineheight), vbBlack x3 = x1 * 3 picGalaxy.Line (x3, 0)-(x3, lineheight), vbBlack x4 = x1 * 4 picGalaxy.Line (x4, 0)-(x4, lineheight), vbBlack 'horizontal lines y1 = picGalaxy.ScaleHeight / 5 picGalaxy.Line (0, y1)-(linewidth, y1), vbBlack Y2 = y1 * 2 picGalaxy.Line (0, Y2)-(linewidth, Y2), vbBlack y3 = y1 * 3 picGalaxy.Line (0, y3)-(linewidth, y3), vbBlack y4 = y1 * 4 picGalaxy.Line (0, y4)-(linewidth, y4), vbBlack End Sub Public Sub AlienExpansion() 'Alien Expansion procedure '***once aliens planets have at least 20 troops, then look at the 3 planets on either side. 'if they're neutral, there is a 5% + 1-TurnNumber chance of expanding Dim X As Integer Randomize For X = 0 To 49 If Planet(X).Owner = Alien And Planet(X).Troops > 20 Then 'look at planets +/- 3 of the alien planet Dim CheckA As Integer Dim CheckZ As Integer Dim Result As Integer Dim Y As Integer Dim ChanceOfExpansion As Integer ChanceOfExpansion = 5 + (Int(Rnd * TurnNumber) + 1) CheckA = X - 3 If CheckA < 0 Then CheckA = 0 'prevent error 9 - subscript out of range CheckZ = X + 3 If CheckZ > 49 Then CheckZ = 49 'ditto for error 9 For Y = CheckA To CheckZ If Planet(Y).Owner = Neutral Then Result = Int(Rnd * 100) + 1 If Result <= ChanceOfExpansion Then 'aliens take planet Dim Force As Integer 'how many aliens invade Force = Int(Rnd * 5) + 5 Planet(Y).Owner = 3 Planet(Y).Troops = Force Planet(X).Troops = Planet(X).Troops - Force Exit Sub End If End If Next Y End If Next X End Sub